Netwrix 1Secure는 데이터와 아이덴티티 전반에 걸쳐 통합된 가시성을 제공합니다 - 14일간 무료로 전체 액세스가 가능합니다.무료 평가판 시작

리소스 센터모범 사례

Linux 서버 강화 및 보안 모범 사례

Linux 서버 강화 및 보안 모범 사례

소개

Unix 및 Linux 시스템을 포함하여 컴퓨팅 환경 전반에 걸쳐 보안 구성을 구현하는 것은 공격 표면을 줄이고 사이버 공격이 초래할 수 있는 피해를 제한하기 때문에 중요한 보안 모범 사례입니다. 실제로 시스템 하드닝은 많은 규정 준수 지침에서 핵심 관리 통제로 다뤄집니다.

이 가이드는 구성 하드닝이 무엇인지, 그리고 Linux 및 Unix 시스템을 위해 하드닝된 빌드 표준을 수립하는 방법을 설명합니다.

시스템 하드닝의 기본

가장 안전한 Linux 서버 또는 기타 컴퓨터는 전원이 꺼져 있고 네트워크와 연결이 끊어진 장비입니다. 하지만 해당 장비를 실제로 IT 서비스를 제공하는 데 사용하려면, 부팅된 후 네트워크(또는 인터넷)에 연결되는 순간에 보안 방어력을 최대화해야 합니다.

바로 여기서 하드닝이 중요해집니다. 시스템 하드닝이란 보안이 유지되는 운영과 데이터 보호를 위해 시스템의 구성을 최적화하는 것을 의미합니다. 악용 가능한 취약점의 범위는 매우 넓기 때문에, 따라야 할 핵심 규칙은 세 가지입니다:

  • 컴퓨터의 역할에 필요하지 않은 기능은 제거하세요. 예를 들어 운영 체제와 기타 애플리케이션은 보통 사용자가 원할 수 있는 유틸리티와 기능이 미리 로드된 “빠른 시작(quick start)” 상태로 제공됩니다. 하지만 제공되는 기능이 많을수록 호스트가 노출하는 공격 표면(attack surface)도 커집니다. 따라서 필요하지 않은 기능은 반드시 비활성화하고, 가능한 한 불필요한 기능을 추가하지 마세요.
  • 패치와 업데이트를 신속하게 적용하세요. 소프트웨어 설계의 결함은 공격자가 악용할 수 있는 취약점을 만들어냅니다. 소프트웨어 벤더는 이러한 문제를 해결하기 위해 패치 또는 업데이트된 소프트웨어 버전을 제공합니다. 따라서 운영 체제를 포함한 모든 소프트웨어가 항상 최신 상태로 완전히 업데이트되어 있는지 확인하세요.
  • 안전한 구성 설정을 유지하세요. 보안 설정을 활성화하고 유지하는 것이 매우 중요합니다.

Linux 시스템 보안 강화

당연히도, 리눅스 보안 강화는 서로 미묘하게 다른 리눅스 배포판이 다양하다는 점을 고려할 때, 그 자체로 전문적인 절차입니다. 리눅스 서버 보안 강화를 위한 모범 사례 가이드, 체크리스트, 팁은 부족하지 않습니다. 예를 들어 Center for Internet Security (CIS) 벤치마크와 DISA STIGs 등이 있습니다. 하지만 이 가이드는 적용해야 할 핵심 구성 옵션을 제공할 것입니다.

중요: 강화된 설정을 적용하기 전에 시스템을 백업하고, 재시작 후에 테스트하세요. 쉽게 잠겨서(접근이 차단되어) 빠져나오지 못할 수 있습니다!

불필요한 기능 제거

먼저 서버를 실행하는 데 필요하지 않은 기능, 유틸리티, 서비스를 제거하는 것부터 시작하세요. 불필요한 소프트웨어는 제거하고, 필요하지 않은 시스템 서비스는 비활성화합니다. 또한 인프라의 하드웨어에도 악용 가능한 취약점이 존재하므로, USB 포트와 같은 접근 가능한 인터페이스가 비활성화되었는지 확인하고, 경우에 따라서는 물리적으로 장비에서 제거하기까지 하세요.

여기서의 작업 흐름은 로그인한 다음 설치된 패키지와 서비스 목록(보고서)을 확인하고, 이를 검토하여 제거하거나 비활성화할 수 있는 항목을 식별하는 것입니다. 필수로 남겨둘 항목에 대해서는, 악용(익스플로잇)으로 이어질 수 있는 알려진 취약점을 해소하기 위해 적용 가능한 패치가 있는지 확인하세요.

Linux/Unix 시스템에서 소프트웨어 목록을 확인하는 방법

시스템

사용할 명령어

리눅스 (예: RedHat 또는 CentOS)

rpm -qa --qf '%{NAME} %{VERSION} %{VENDOR}\\n'

데비안 리눅스 (예: 우분투)

dpkg -l

페도라 리눅스

터미널이나 푸티 세션에서 소프트웨어를 나열하려면:

service --status-all

chkconfig --list

systemctl -a

서비스를 중지하려면:

Service <Service-Name> stop

Chkconfig <Service-Name>

Systemctl stop <Service-Name>

서비스를 비활성화하려면:

Systemctl disable <Service-Name>

Chkconfig <Service-Name> off

또한 /etc/init.d/ 경로를 검사하여 서비스 제어 스크립트를 확인하고 ls /etc/init.d/를 실행하여 모든 시작 스크립트를 노출합니다. 그런 다음 비활성화할 스크립트를 이름 변경하거나 제거합니다.

열려 있는 포트와 기타 네트워크 취약점 최소화

네트워크 기반 공격은 가장 흔한 위협 중 하나입니다. 위험을 줄이려면 네트워크에서 접근 가능한 열린 포트를 식별하고, 필요하지 않은 경우 해당 프로세스를 제거하세요. Linux에서 열린 포트를 확인하려면 다음 명령을 사용합니다:

      ss -tulpn | egrep “LISTEN” | awk ‘{print “IP-Port “ $4 “ PID/Name “ $7}’
      

추가로:

  • TCP Wrappers 서비스가 활성화되어 있는지 확인하세요.
  • 다음 두 가지를 정의하세요: etc/hosts.allow 화이트리스트와 etc/hosts.deny 블랙리스트.
  • iptables 또는 Firewalld 서비스를 사용하되, IP V4와 V6 트래픽 모두에 대해 Deny All 정책을 적용하세요. 네트워크 내에서 타사 WAF 및 방화벽 보호를 사용하고 있더라도 동일하게 적용해야 합니다.
  • ICMP 트래픽을 차단해, 공격자 도구가 사용하여 장치 검색(핑 스캔)을 수행하는 것을 막으세요.

사용자 계정 및 인증 검토

로컬 사용자 계정을 검토하고 불필요한 계정은 모두 제거하세요. 남겨두는 로컬 사용자 계정에 대해서는 비밀번호 복잡성, 길이, 만료, 재사용 및 변경 빈도를 포함하는 강력한 비밀번호 정책을 구성해야 합니다. 또한 저장된 비밀번호에는 강력한 해싱 알고리즘을 사용하도록 하세요.

사용자 계정과 인증은 Active Directory와 같은 중앙 집중식 제어 시스템을 사용해 관리해야 하며, 더 나아가서는 Zero Standing Privilege 전략을 지원하는 현대적인 privileged access management (PAM) 솔루션을 사용하는 것이 좋습니다. 이는 전통적인 사용자 계정과 영구적으로 부여된 권한에서 비롯되는 여러 문제를 상쇄해 줍니다. 물론 root는 절대 사용하지 말고, sudo 권한 상승은 정말 필요한 경우에만 사용되도록 항상 확인하세요.

로컬 계정용 비밀번호 정책을 구성하는 방법

다음 구성 파일을 찾아 편집합니다. /etc/security/pwquality.conf

14자 비밀번호를 적용하려면:

      minlen = 14
      

모든 비밀번호에 복잡성을 적용하려면:

      minclass = 14
      

또는

      dcredit = -1

ucredit = -1

ocredit = -1

lcredit = -1
      


강력한 비밀번호 잠금 해제(잠금) 정책을 적용하려면:

다음 옵션을 설정하려면 /etc/pam.d/system-auth 및 /etc/pam.d/password-auth 파일을 업데이트하세요:

      auth required pam_faillock.so preauth silent deny=5 unlock_time=900

auth required pam_faillock.so authfail deny=5 unlock_time=900
      

비밀번호 기록 정책을 5개 이상으로 적용하려면:

/etc/pam.d/password-auth에서 pam_pwhistory.so 및 pam_unix.so 줄에 remember=5 옵션을 추가하세요:

      password requisite pam_pwhistory.so try_first_pass local_users_only enforce-for-root retry=3 remember=5

password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=5
      

강력한 비밀번호 해싱을 적용하려면:

다음과 같이 /etc/pam.d/system-auth/etc/pam.d/password-auth 파일을 업데이트하세요:

/etc/pam.d/password-auth:

      password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok
      

/etc/pam.d/system-auth:

      password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=5
      

서비스 계정 검토

시스템 및 서비스 계정을 검토하고, 더 이상 필요하지 않은 계정은 제거해야 합니다.

서비스 계정은 로컬에서 실행되는 프로세스의 동작만을 지원하며 사용자 셸을 제공하지 않도록 “강화”되어 있으므로, 이러한 계정은 사용자의 로그온으로 서버에 접근하는 데에는 결코 사용할 수 없습니다. 하지만 핵심 강화 원칙은 기능을 최소화하는 것이므로, 사용하지 않는 서비스 계정은 여전히 제거해야 합니다.

Linux 및 Unix를 위한 SSH 강화

Linux 시스템을 원격으로 관리하기 위한 주요 경로인 SSH는 각별한 주의가 필요합니다. SSH 서버의 동작을 강화하기 위해 설정 파일의 기본값 중 여러 항목을 활성화해야 합니다. /etc/ssh/sshd_config 파일에서 해당 항목을 사용하도록 설정해야 합니다. 

SSH는 모든 Linux 및 Unix 액세스에 사용되므로, 다음 지침은 Unix 강화에도 그대로 적용됩니다.

SSH 프로토콜 v2를 사용하도록 설정

예를 들어, 기본 구성은 SSH 프로토콜의 구식이며 보안이 덜한 버전 1을 사용하도록 설정합니다. CIS 하드닝 가이드에서는 보안을 강화하기 위해 버전 2를 활성화할 것을 권장합니다. 이를 위해 구성 파일(/etc/ssh/sshd_config)에서 Protocol 2 설정의 앞에 있는 #을 제거하여 간단히 주석을 해제하면 됩니다. 다음과 같이 하세요:

/etc/ssh/sshd_config 의 기본 항목 /etc/ssh/sshd_config :

      # The default requires explicit activation of protocol 1

# Protocol 2
      

더 안전한 구성:

      # The default requires explicit activation of protocol 1

Protocol 2
      

추가 하드닝

또한 다음 권장 CIS 하드닝 설정을 구성 파일에 적용하세요:

      LogLevel INFO

IgnoreRhosts yes

…

PermitEmptyPasswords no

…

LoginGraceTime 60

PermitRootLogin no

MaxAuthTries 4

HostbasedAuthentication no

…

X11Forwarding no…

PermitUserEnvironment no

…

ClientAliveInterval 300

ClientAliveCountMax 0

…

Banner /etc/issue.net

 …

AllowUsers <Specify user names, separated by spaces, e.g. user1 user2>
      

추가 참고 사항:

/etc/issue.net 적절한 배너를 포함하도록 생성/편집해야 합니다. 예:

경고! 이 시스템에 대한 무단 액세스는 금지되어 있으며 법에 따라 처벌받을 수 있습니다. 이 시스템에 접속함으로써, 무단 사용이 의심되는 경우 귀하의 행위가 모니터링될 수 있다는 데 동의하는 것으로 간주됩니다.

또한 AllowUsers, AllowGroups 와 함께 구성 스위치/키워드로도 지원됩니다.

Apache 웹 서버 보안 강화

Linux는 인터넷 기반 웹 애플리케이션을 호스팅하는 데 가장 선호되는 플랫폼이며, Apache Tomcat과 Apache HTTP Server(흔히 Apache HTTPD로 불림)는 웹 콘텐츠를 제공하는 가장 인기 있는 옵션 두 가지입니다.

Apache 구성 하드닝의 접근 방식도 동일합니다. 가능한 범위에서 기능을 최소화하고 보안 구성 설정을 적용하세요.

필수 Apache 모듈만 활성화되어 있는지 확인하세요:

      httpd -M
      

예를 들어, mod_davmod_dav_fs 는 항상 비활성화해야 하며, log_config 모듈은 항상 로드되고 활성화되어 있어야 합니다.

package.access 정의에 다음과 같은 허용 패키지만 포함되어 있는지 확인하세요:

package.access = sun.,org.apache.catalina.,org.apache.coyote.,

org.apache.tomcat.,org.apache.jasper.

server.xml 파일을 구성합니다:

다음의 server.xml 파일은 CATALINA_HOME/conf  경로에 있는 웹 서버의 핵심 구성 저장소입니다. 다음에 포함할 것을 권장하는 설정은 server.xml 은(는) 다음과 같습니다:

  • 종료(Shutdown) 포트를 비활성화합니다:
      Server port="-1" shutdown="SHUTDOWN">
      
  • 기본 HTTPConnector AJPConnector를 포함하여 사용하지 않는 커넥터를 제거하세요. HTTPConnector를 제거하려면 이 태그를 삭제하거나 주석 처리하세요:
      Connector className="org.apache.catalina.connector.http.HttpConnector"

...

connectionTimeout="60000"/>
      

기본 presence-advertising 설정을 제거하세요:

Tomcat의 경우:

xpoweredBy 속성을 false로 설정하세요:

      xpoweredBy="false" />
      

HTTP Server의 경우:

  • 기본 index.html을 제거하고 아래 내용을 /etc/httpd/conf.d/welcome.conf 에서 각 줄마다 # 또는 ##를 사용해 주석 처리합니다:
      ##<LocationMatch "^/+$">

## Options -Indexes

## ErrorDocument 403 /error/noindex.html

##</LocationMatch>
      
  • Server-Status 섹션을 주석 처리합니다:
      ##<Location /server-status>

## SetHandler server-status

## Order deny,allow

## Deny from all

## Allow from .example.com

##</Location>
      
  • server-info 섹션을 주석 처리합니다:
      ##<Location /server-info>

## SetHandler server-info

## Order deny,allow

## Deny from all

## Allow from .example.com

##</Location>
      

진단 트레이스 기능을 비활성화합니다:

allowTrace  속성을 Connector 에 대해 false

애플리케이션의 자동 배포를 비활성화하고, 시작 시 배포도 비활성화하십시오:

      autoDeploy="false"

deployOnStartup="false"
      

추가 보강(하드닝):

  • 파일 및 폴더 권한이 엄격하게 설정되었는지 확인하고, Apache 서비스가 쉘을 사용하지 않는 서비스 계정(즉, 시스템에 로그인하는 데 사용할 수 없는 계정)으로 실행되도록 하십시오. 디렉터리 리스팅과 브라우징을 비활성화하십시오.
      $CATALINA_HOME

$CATALINA_BASE
      

Linux 커널 하드닝

SELinux는 Linux 커널을 수정하여 강제 접근 통제(Mandatory Access Controls)를 적용함으로써, Linux 프로세스가 파일과 프로그램에 접근할 수 있는 방식을 제한합니다. 이러한 추가적인 제한 계층은 루트킷 악성코드에 대한 근본적인 보호 메커니즘을 제공합니다. AppArmor는 Debian 배포판에 대해 이에 상응하는 수준의 MAC(강제 접근 제어)를 제공합니다.

SELinux 설정

CentOS/RHEL에 SELinux 설치:

      dnf install libselinux
      

SELinux 사용 설정:

기본적으로 SELinux는 비활성화됩니다. 부팅 시 SELinux를 활성화하려면 edit/etc/default/grub 다음 기본 설정을 제거하십시오:

      selinux=0

enforcing=0
      

SELinux 설정을 enforcing으로 설정

다음 내용을 포함하도록 /etc/selinux/config 파일을 편집합니다:

      SELINUX=enforcing

SELINUXTYPE=default
      

모든 서비스가 SELinux에 의해 제어되는 보안 컨텍스트로 실행되고 있는지 확인합니다:

다음 명령은 init 프로세스에서 시작되는 서비스(해당 서비스에 기본값이 아닌 보안 컨텍스트가 할당되어야 할 수 있음)를 나열합니다:

      ps -eZ | egrep "initrc" | egrep -vw "tr|ps|egrep|bash|awk" | tr ':' ' ' | awk '{ print $NF }'
      

모든 설정이 로드되었는지 확인하려면 컴퓨터를 다시 시작하십시오.

AppArmor 설정

Ubuntu/Debian에 AppArmor를 설치하세요:

      apt-get install apparmor apparmor-profiles apparmor-utils
      

부팅 시 AppArmor를 활성화:

다음 파일을 편집: /etc/default/grub 그리고 다음 설정을 추가하세요:

      GRUB_CMDLINE_LINUX="apparmor=1 security=apparmor"
      

모든 AppArmor 프로필이 enforce 모드에 있는지 확인하세요:

      aa-enforce /etc/apparmor.d/*
      

임베디드 리눅스 보안 강화

임베디드 리눅스(Embedded Linux)는 스마트폰, 스마트 TV, 셋톱박스, 광대역 인터넷 라우터와 같은 임베디드 장치 또는 임베디드 시스템을 위한 간소화된 운영 체제를 제공합니다.

서버급 리눅스 장치에서 보통 제공하는 기능 전부가 필요하지 않으며, 제조 비용을 절감하기 위해 저장공간, 메모리, CPU 같은 하드웨어 리소스가 최소화된 경우에는, 설치/구동 용량이 줄어든 간소화된 운영 체제가 매력적입니다. 예를 들어, 구글이 개발한 오픈 소스 Android 플랫폼은 스마트폰과 TV에 최적화되어 있고, OpenWrt 라우터 펌웨어는 다양한 광대역 라우터에 사용됩니다.

운영 체제에 포함되는 기능은 의도된 사용 목적에 따라 크게 달라집니다. 예를 들어 Android에는 화면 잠금, 얼굴 인식, PIN 입력 지원, 위치 서비스가 포함되어 있습니다. 이러한 기능은 가정용 라우터의 운영 체제에는 필요하지 않지만, VPN, 게스트 Wi‑Fi, 대역폭 제한 기능은 포함됩니다. 따라서 보안 강화(하드닝) 가이드는 사용 중인 특정 장치와 플랫폼에 맞춰 구체적으로 연결됩니다.

Android 보안 강화 하이라이트

장치 펌웨어가 최신 상태인지 확인하세요:

다음으로 이동: Settings | System | System Updates; 다음을 선택: Check for Update 사용 가능한 업데이트가 있으면 설치하세요.

Google Play 및 보안 업데이트를 설치하세요:

다음으로 이동: Settings | Security:

  • 다음에서 선택: Google Security Check-Up 사용 가능한 업데이트가 있으면 적용하세요.
  • 다음에서 선택: Google Play system update 사용 가능한 업데이트가 있으면 적용하세요.

일반 장치 보안을 사용하도록 설정합니다:

  1. 다음으로 이동합니다: Settings | Security | Device Security 그런 다음 다음을 수행합니다:
  • 다음으로 설정: ‘Screen Lock’‘Enabled’로 합니다.
  • 다음으로 설정: ‘Pattern Visible’‘Disabled’로 합니다.
  • 다음으로 설정: ‘Automatically Lock’‘Immediately’로 합니다.
  • 설정: ‘Power Button Instantly Locks’을(를) ‘On’로 합니다.
  • 기기 관리자 앱 설정: ‘Find My Device’을(를) ‘Enabled’로 합니다.
  • 설정 ‘Allow remote lock and erase’을(를) ‘Enabled’로 합니다.

2. 다음으로 이동: Settings | System | Advanced 그런 다음 다음을 수행합니다.

  • 설정 ‘Developer Options’을(를) ‘Off’로 합니다.

3. 다음으로 이동: Settings | Apps & Notifications | Advanced | Special App Access 그런 다음 다음을 수행하세요:

  • ‘Install Unknown Apps’ 를(을) ‘Not Allowed’으로 설정하세요.

4. 실행: Play Store | Menu 그런 다음 다음을 수행하세요:

  • ‘My Apps & Games’ 를 선택한 다음 ‘Update All’을 클릭하세요.

OpenWrt 하드닝 하이라이트

  • 기본값의 관리자 비밀번호를 변경하세요.
  • 펌웨어가 항상 최신 버전으로 업데이트되도록 하세요.

Kali Linux 보안 강화

Kali Linux는 펜테스터가 선호하는 플랫폼이 되도록 최적화되어 있으므로, 보안 점검과 침투 테스트에 사용할 수 있는 다양한 유틸리티가 포함되어 있습니다.

Kali Linux는 Debian 기반 리눅스 배포판이므로, 위의 Linux 보안 강화 팁을 사용해 Kali Linux 시스템의 보안 취약점을 해결할 수 있습니다.

Linux Mint 보안 강화

마찬가지로 Linux Mint도 Ubuntu에서 파생된 데스크톱 Linux 플랫폼이므로 Debian-Linux에 적용하던 것과 동일한 보안 강화 절차를 채택해야 합니다. 이전의 Linux Hardening Checklist 단계부터 진행한 다음, 이를 Linux Mint 시스템에 적용하십시오.

Arch Linux 보안 강화

Debian 또는 Fedora에서 직접 파생되지 않은 독립형 리눅스 배포판인 Arch Linux는, 어떤 방식으로 무엇을 강화할지에 대한 개념은 유사하더라도 보안 강화 조치 측면에서는 개별적인 경우에 해당합니다. Arch 코드는 불필요한 요소를 줄인 ‘no filler’ 리눅스 배포판으로 의도적으로 구축되었으므로, 불필요한 서비스를 제거/비활성화하는 단계에서 요구되는 강화 작업이 상대적으로 적을 수 있습니다.

마지막 말씀

강화된 시스템이라도 여전히 손상될 수 있으며, 특히 다음과 같은 경우에 취약합니다:

  • 제로데이 위협 — 우리가 알지 못했던 취약점을 악용한 공격으로, 따라서 이에 대한 방어도 제공하지 못한 경우
  • 랜섬웨어 및 기타 악성코드
  • 유출된(탈취된) 자격 증명을 사용한 해커와, 권한을 악용하는 사용자를 모두 포함하는 내부 위협

따라서 시스템을 강화하는 것 외에도 추가적인 방어가 필요합니다. 특히 시스템 및 파일 무결성을 모니터링하는 것이 중요합니다. 예상치 못한 변경이 발생하면 침해 또는 기타 보안 사고로 이어질 수 있습니다. Netwrix Change Tracker는 계획되지 않은 모든 변경 사항에 대해 실시간 알림을 제공하며, 모든 Linux 및 Unix 플랫폼을 지원합니다.

Netwrix Change Tracker

Netwrix의 보안 구성 관리 소프트웨어로 Linux/Unix 시스템 무결성에 대한 확신을 얻으세요.

무료 평가판 신청

공유하기