리눅스에서 제공하는 웹 서비스(httpd)는 Apache HTTP Server로 세계에서 가장 널리 사용되는 웹 서버 중 하나입니다. 오픈 소스이며 안정적이고 확장 가능한 웹 서버입니다. “Apache서버(httpd)의 환영 메세지 페이지가 보이는 절차” 글을 참고하시면 웹 페이지가 어떤 절차로 응답하는지 쉽게 이해할 수 있습니다.
점검 내용
- 디렉터리 검색 기능의 활성화 여부 점검
- httpd 데몬이 root 권한으로 구동되는지 여부 점검
- “..” 와 같은 문자 사용 등으로 상위 경로로 이동이 가능한지 여부 점검
- 설치 시 기본으로 생성되는 불필요한 파일의 삭제 여부 점검
- 심볼릭 링크, Aliases 사용 제한 여부 점검
- 파일 업로드 및 다운로드의 사이즈 제한 여부 점검
- 웹 서버의 루트 디렉터리와 OS의 루트 디렉터리를 다르게 지정하였는지 점검
- 웹페이지에서 오류 발생 시 출력되는 메시지 내용 점검
점검 목적
- 외부에서 디렉터리 내의 모든 파일에 대한 접근 및 열람을 제한함을 목적으로 함
- httpd 데몬을 root 권한으로 구동하지 않고 별도의 권한으로 구동함으로써 침해 사고 발생 시 피해 범위 확산 방지를 목적으로 함
- 상위 경로 이동 명령으로 비인가자의 특정 디렉터리에 대한 접근 및 열람을 제한하여 중요 파일 및 데이터 보호를 목적으로 함
- 설치 시 디폴트로 설치되는 불필요한 파일을 제거함을 목적으로 함
- 무분별한 심볼릭 링크, aliases 사용제한으로 시스템 권한의 탈취 방지를 목적으로 함
- 기반시설 특성상 원칙적으로 파일 업로드 및 다운로드를 금지하고 있지만 불가피하게 필요시 용량 사이즈를 제한함으로써 불필요한 업로드와 다운로드를 방지해 서버의 과부하 예방 및 자원을 효율적으로 관리하기 위함
- 웹 서비스 영역과 시스템 영역을 분리시켜서 웹 서비스의 침해가 시스템 영역으로 확장될 가능성을 최소화하기 위함
- HTTP 헤더, 에러페이지에서 웹 서버 버전 및 종류, OS 정보 등 웹 서버와 관련된 불필요한 정보가 노출되지 않도록 하기 위함
보안 위협
- 디렉터리 검색 기능이 활성화 되어 있을 경우, 사용자에게 디렉터리내 파일이 표시되어 WEB 서버 구조 노출뿐만 아니라 백업 파일이나 소스파일, 공개되어서는 안되는 파일 등이 노출 가능함
- httpd 데몬을 root 권한으로 실행시 웹서비스가 파일을 생성, 수정하는 과정에서 웹서비스에 해당하지 않는 파일도 root 권한에 의해 쓰기가 가능하며 해킹 발생시 root 권한이 노출 될 수 있음
- 상위 경로로 이동하는 것이 가능할 경우 접근하고자 하는 디렉터리의 하위 경로에 접속하여 상위경로로 이동함으로써 악의적인 목적을 가진 사용자의 접근이 가능함
- 설치 시 htdocs 디렉터리 내에 매뉴얼 파일은 시스템 관련 정보를 노출하거나 해킹에 악용될 수 있음
- 웹 루트 폴더(DocumentRoot)에 root 디렉터리(/)를 링크하는 파일이 있으면 디렉터리 인덱싱 기능이 차단되어 있어도 root 디렉터리 열람이 가능함
- 악의적 목적을 가진 사용자가 반복 업로드 및 웹 쉘 공격 등으로 시스템 권한을 탈취하거나 대용량 파일의 반복 업로드로 서버자원을 고갈시키는 공격의 위험이 있음
- 웹 서버의 루트 디렉터리와 OS의 루트 디렉터리를 다르게 지정하지 않았을 경우, 비인가자가 웹 서비스를 통해 해킹이 성공할 경우 시스템 영역까지 접근이 가능하여 피해가 확장될 수 있음
- 불필요한 정보가 노출될 경우 해당 정보를 이용하여 시스템의 취약점을 수집할 수 있음
점검 대상
- Linux : Rocky 9
판단 기준
- 양호 :
– 디렉터리 검색 기능을 사용하지 않는 경우
– httpd 데몬이 root 권한으로 구동되지 않는 경우
– 상위 디렉터리에 이동제한을 설정한 경우
– 설치 시 기본으로 생성되는 불필요한 파일 및 디렉터리가 제거되어 있는 경우
– 심볼릭 링크, Aliases 사용을 제한한 경우
– 파일 업로드 및 다운로드를 제한한 경우
– DocumentRoot 지시자를 별도의 디렉터리로 지정한 경우
– ServerTokens Prod, ServerSignature Off로 설정되어있는 경우 - 취약 :
– 디렉터리 검색 기능을 사용하는 경우
– httpd 데몬이 root 권한으로 구동되는 경우
– 상위 디렉터리에 이동제한을 설정하지 않은 경우
– 설치 시 기본으로 생성되는 불필요한 파일 및 디렉터리가 제거되지 않은 경우
– 심볼릭 링크, Aliases 사용을 제한하지 않은 경우
– 파일 업로드 및 다운로드를 제한하지 않은 경우
– DocumentRoot 지시자를 기본 디렉터리로 지정한 경우
– ServerTokens Prod, ServerSignature Off로 설정되어있지 않은 경우
조치 방법
- 웹 서버의 루트 디렉터리 및 환경 설정 파일 저장 디렉터리 확인
– /etc/httpd/conf/
– /etc/httpd/conf.d/[root@rocky9u2 ~]# vi /etc/httpd/conf/httpd.confServerRoot "/etc/httpd" DocumentRoot "/var/www/html" IncludeOptional conf.d/*.conf - 디렉터리 검색 기능 제거(Options 지시자에서 Indexes 옵션 제거)
- Options 지시자에서 Indexes 옵션 설정 여부 확인
[root@rocky9u2 httpd]# grep -vr "^\(#\|[[:space:]]\+#\)" ./conf/* ./conf.d/* | grep "Options.*Indexes"./conf/httpd.conf: Options Indexes FollowSymLinks ./conf.d/autoindex.conf: Options Indexes MultiViews FollowSymlinks ./conf.d/userdir.conf: Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ./conf.d/welcome.conf: Options -Indexes
- Option 지시자에서 Indexes 옵션 삭제 후 저장
- Options 지시자에서 Indexes 옵션 설정 여부 확인
- httpd 데몬을 root 가 아닌 별도 계정으로 구동
- User 지시자 및 Group 지시자에 등록된 사용자 확인 방법
[root@rocky9u2 httpd]# vi ./conf/httpd.confUser apache Group apache
- httpd 데몬을 구동하는 사용자는 쉘 로그인이 불가능하도록 제한 필수
[root@rocky9u2 httpd]# cat /etc/passwd | grep "apache"apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
- User 지시자 및 Group 지시자에 등록된 사용자 확인 방법
- 특정 리소스에 접근하려는 사용자가 정당한 사용자임을 인증
- AllowOverride 지시자의 옵션에 None이 있는 Directory 확인
[root@rocky9u2 httpd]# grep -vr "^\(#\|[[:space:]]\+#\)" ./conf/* ./conf.d/* | grep -w "AllowOverride None"./conf/httpd.conf: AllowOverride None ./conf/httpd.conf: AllowOverride None ./conf/httpd.conf: AllowOverride None ./conf.d/autoindex.conf: AllowOverride None ./conf.d/welcome.conf: AllowOverride None
- 사용자 인증이 필요한 디렉터리(예, /var/www/html)의 AllowOverride 지시자의 옵션을 None -> AuthConfig로 변경 후 저장
[root@rocky9u2 httpd]# vi ./conf/httpd.confAccessFileName .htaccess <Directory /var/www/html> # AllowOverride None AllowOverride AuthConfig </Directory>
- 사용자 인증이 필요한 디렉터리(예, /var/www/html)에 “.htaccess” 파일 생성(“AccessFileName .htaccess” 설정 확인)
[root@rocky9u2 httpd]# vi /var/www/html/.htaccessAuthType Basic AuthName "Protected" AuthUserFile /etc/httpd/conf/.htpasswd Require valid-user
- 사용자 인증에 사용할 아이디 및 패스워드 생성 및 httpd 데몬 재시작
[root@rocky9u2 httpd]# htpasswd -c /etc/httpd/conf/.htpasswd archerNew password: Re-type new password: Adding password for user archer[root@rocky9u2 httpd]# systemctl restart httpd
- 웹 사이트 접속하면 사용자 인증창이 나타남
- AllowOverride 지시자의 옵션에 None이 있는 Directory 확인
- 불필요한 파일 및 디렉터리 제거
- httpd 및 httpd-core 패키지 설치 시 함께 설치된 메뉴얼 확인 및 삭제
dnf repoquery -l httpd httpd-core | grep "/manual/" rm -rf /path/to
- httpd 및 httpd-core 패키지 설치 시 함께 설치된 메뉴얼 확인 및 삭제
- 심볼릭 링크, Alias 사용 제한
- 환경 설정 파일의 Optiions 지시자에서 FollowSymLinks 설정 사항 및 Alias 지시자 검색
[root@rocky9u2 httpd]# grep -vr "^\(#\|[[:space:]]\+#\)" ./conf/* ./conf.d/* | egrep "FollowSymLinks|Alias"./conf/httpd.conf: Options Indexes FollowSymLinks ./conf/httpd.conf: ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" ./conf.d/autoindex.conf:Alias /icons/ "/usr/share/httpd/icons/" ./conf.d/welcome.conf:Alias /.noindex.html /usr/share/httpd/noindex/index.html ./conf.d/welcome.conf:Alias /poweredby.png /usr/share/httpd/icons/apache_pb3.png ./conf.d/welcome.conf:Alias /system_noindex_logo.png /usr/share/httpd/icons/system_noindex_logo.png
- FollowSymLinks 항목을 삭제하거나 -FollowSymLinks로 변경
- Alias 지시자에 등록된 경로를 재확인하여 불필요한 사항이 있으면 삭제
- 환경 설정 파일의 Optiions 지시자에서 FollowSymLinks 설정 사항 및 Alias 지시자 검색
- 파일 업로드 및 다운로드 용량 제한(httpd.conf)
- LimitRequestBody 지시자를 사용하여 Apache 웹 서버에서 POST 요청으로 전송되는 요청 본문의 크기를 제한
– <Directory /> 블록 안에서 설정된 값은 서버의 모든 디렉터리에 대해 적용됨
– 업로드 및 다운로드 파일이 5MB를 넘지 않도록 설정 권고함[root@rocky9u2 httpd]# vi ./conf/httpd.conf<Directory /> LimitRequestBody 5000000 # 본문 크기 제한을 5MB로 설정 </Directory>
- LimitRequestBody 지시자를 사용하여 Apache 웹 서버에서 POST 요청으로 전송되는 요청 본문의 크기를 제한
- 별도의 디렉터리로 DocumentRoot 지정(httpd.conf)
- httpd 패키지 설치 시 지정된 디폴트 디렉터리(/var/www/html)를 사용하지 않고 변경함
[root@rocky9u2 httpd]# vi ./conf/httpd.confDocumentRoot "/path/to"
- httpd 패키지 설치 시 지정된 디폴트 디렉터리(/var/www/html)를 사용하지 않고 변경함
- 웹페이지에서 오류 발생 시 헤더 정보를 최소한으로 제한(httpd.conf)
- ServerTokens 지시자에 Prod 옵션, ServerSignature 지시자에 Off 옵션 설정
– <Directory /> 블록 안에서 설정된 값은 서버의 모든 디렉터리에 대해 적용됨[root@rocky9u2 httpd]# vi ./conf/httpd.conf<Directory /> ServerTokens Prod ServerSignature off </Directory>
- ServerTokens 지시자에 Prod 옵션, ServerSignature 지시자에 Off 옵션 설정
- 추가 사항은 “Apache 웹 서버(httpd)의 보안 설정을 강화하기(httpd.conf)” 글을 참고해 주세요
◁ SNMP 서비스 점검 | | | SMTP 서비스 점검 ▷ |
---|