1. 웹 서버 취약점
1) 디렉터리 리스팅(Directory Listing)
1.1) 개념
웹 어플리케이션을 사용하고 있는 서버에 인덱싱 기능이 활성화 되어있을 경우 공격자가 브라우징을 통해 서버내 모든 디렉터리 및 파일 목록을 볼 수 있는 취약점을 말한다.
7.2) 대응 방안
웹서버의 인덱싱 기능을 제거한다.
httpd.conf
Options 속성에 Indexes 설정을 제거한다.
제거하게되면 접근 시 403 에러가 발생한다.
<Directory />
Options None
AllowOverride All
</Directory>
IIS
홈 디렉터리 항목에서 디렉터리 검색 기능을 해제 한다.
Tomcat
web.xml 파일 안의 default 서블릿 초기 파라미터 설정에 listings 파라미터를 false로 설정한다.
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
2) 웹 서비스 메소드 설정 취약점
2.1) 개념
GET, POST 이외에 PUT, DELETE 등 불필요한 메소드를 허용하였을 경우 공격자가 이를 악용하여 웹서버에 악성파일을 생성하거나 중요 파일의 삭제 및 수정이 가능한 취약점이다.
2.2) 대응 방안
GET, POST 이외의 불필요한 메소드를 사용할 수 없도록 설정한다.
위치: httpd.conf
3) 관리자 페이지 노출 취약점
3.1) 개념
관리자 페이지가 추측 가능한 형태(index.php, wp-admin/config.php)로 구성되어있을 경우 공격자가 Brute Force Attack을 통해 관리자 권한을 흭득할 수 있는 취약점이다.
3.2) 대응 방안
사용자 인증 시 Two-Factor-Authentication 또는 Two-Channel-Authentication을 사용한다.
관리자 페이지에 대한 접근제어 설정
httpd.conf
<Directory "/var/www/html/admin">
Order Deny,Allow
Deny from all
Allow from 192.168.1.100
</Directory>
4) 검색엔진 정보 노출 취약점
4.1) 개념
검색엔진에 의해 웹사이트 해킹에 필요한 정보가 검색되어 해킹의 빌미가 제공되는 취약점이다.
접근제한에 대한 설정을 robots.txt 파일에 기술한다.
4.2) robots.txt 설정 방법
robots.txt 파일은 root 디렉터리에 저장해야한다.
모든 검색 로봇에 대해 전체 웹사이트에 대한 접근을 차단한다.
User-agent: *
Disallow: /
Googlebot은 웹사이트 전체에 대한 접근을 허용하고 Yeti는 차단한다.
User-agent: Googlebot
Disallow: (Allow: /)
User-agent: Yeti
Disallow: /
Googlebot-image 검색로봇에 대해 /admin 디렉터리 접근을 차단하고 .pdf로 끝나는 URL에 대한 접근을 차단한다.
User-agent: Googlebot-image
Disallow: /admin/
Disallow: /*pdf$
모든 검색로봇에 대해 ?가 포함된 URL을 차단한다. (Query String을 포함한 검색결과 차단)
User-agnet: *Disallow: /*?
2. 웹서버 보안 대책(Apache 보안 설정)
1) 최소 권한 부여
1.1) 개념
웹 서버의 보안 취약점으로 인해 권한 탈취가 발생할 가능성이 존재하기 때문에 웹서버 운영 시 위험을 최소화 하기 위해 최소한의 권한을 가진 사용자와 그룹으로 웹 서버 프로세스를 실행한다.
웹서버 프로세스가 root 권한으로 실행될 경우 공격자가 시스템 전체의 제어권을 탈취해 피해 범위가 확산될 수 있으므로 별도의 권한으로 서버 프로세스를 실행한다.
1.2) 대응 방안
웹서버 프로세스를 실행할 apache 사용자 및 그룹을 생성하고 로그인이 필요하지 않기 때문에 해당 사용자의 로그인 쉘 부분에 /sbin/nologin, /bin/false로 설정하여 로그인 하지 못하도록 설정한다.
위치: httpd.conf
서버 프로세스의 실행 권한을 해당 사용자로 설정한다.
2) 심볼릭 링크 사용 설정 제거
2.1) 개념
root 디렉터리에 특정 기능을 사용하기 위해 root 디렉터리에 심볼릭 링크를 걸게 되면 웹 서버 구동 사용자 권한으로 웹에서 허용되는 디렉터리 이외에 다른 파일에 접근할 수 있는 문제점이 발생한다.
2.2) 대응 방안
위치: httpd.conf
모든 디렉터리 섹션의 Options 지시자에 FollowSymLinks 설정을 제거한다.
3) 웹 서비스 정보 숨김
3.1) 개념
웹서버의 응답 헤더나 에러메시지 등에 웹서버 버전이나 종류, OS 정보, 응용프로그램 버전 등을 전송하는데 이 정보는 공격자에게 잘 알려진 취약점을 공격하는데 유용하게 이용하기 때문에 해당 정보를 숨기는것이 안전하다.
3.2) 대응 방안
위치: httpd.conf
ServerTokens 지시자에 Prod 설정을 하여 웹서버, OS 모듈 정보만 출력되도록 설정한다.
ServerSignature 지시자에 Off 설정하여 에러메시지에 웹서버 관련 정보를 전송되지 않도록 설정한다.
Prod: 웹서버 종류(Server: Apache)
4) 웹서버 설정파일⭐
4.1) 주요 지시자
① ServerRoot "/etc/httpd"
웹서버가 설치된 최상위 디렉터리 경로를 지정한다.
② Listen 80
웹서버 리스닝 포트를 지정한다.
③ ServerAdmin admin@peemang.com
에러메시지 출력시 관리자 메일 주소 표시한다.
④ DocumentRoot "/var/www/html"
웹 어플리케이션의 최상위 디렉터리 경로를 지정한다.
⑤ DirectoryIndex index.php index.html
클라이언트가 디렉터리만 명시할 경우 이를 처리할 자원 목록 지정한다. 해당 자원이 없다면 Indexing 기능이 존재하는지 확인하고 존재하지 않다면 에러 페이지를 출력한다.
동작 순서: peemang.com/notice → /notice/index.php →/notice/index.html →인덱싱 기능 유무 확인 → 에러 페이지 출력
4.2) 시간 관련 설정
① Timeout 120
클라이언트 요청에 의해 서버와 연결이 된 후 클라이언트-서버 간에 아무런 메시지가 발생하지 않을 동안의 대기시간(초)을 지정한다.
② KeepAlive On
클라이언트와 서버 프로세스간의 연결을 일정 조건에 따라 지속시켜 동일한 연결을 통해 동일 클라이언트의 다수 요청을 처리하는 기능의 사용 여부를 지정한다.
해당 방식을 설정하면 매번 TCP 연결 설정을 하지 않아도 되므로 부하를 줄이고 효율적으로 통신할 수 있는 장점이 있기 때문에 기능을 활성화 한다.
③ MaxKeepAliveRequest 100
KeepAlive 기능 사용 시 클라이언트-서버 프로세스간 연결을 지속시키는 동안에 허용할 최대 요청 건수를 지정한다.
④ KeepAliveTImeout
KeepAlive 기능 사용 시 클라이언트의 마지막 요청 이후 다음 요청을 대기하는 시간을 지정한다.
⑤ RequestReadTimeout header=5 body=5
클라이언트로부터 요청 메시지의 헤더부와 바디부를 모두 수신하는 시간에 대한 타임아웃을 지정한다.
해당 시간동안 수신받지 못하는 경우 408(Re quest Timeout)에러 응답 메시지를 반환한다.
Slow 계열을 HTTP 도스 공격(Slow HTTP Header, Slow HTTP POST)에 효과적으로 대응할 수 있다.
4.3) 로그 관련 설정
① ErrorLog logs/error_log
에러로그를 저장할 경로를 지정한다. 해당 경로에는 웹 서버 구동 중 발생하는 에러 및 디버깅 메시지가 남는다.
위치: /etc/httpd/logs/error_log
② CustomLog logs/accesslog combined
접속 기록을 저장하기 위한 로그파일의 경로를 지정한다.
위치: /etc/httpd/logs/access_log
3. 웹 로그
1) 개념
로그분석은 특정 파일에 대한 연속적인 요청, 서버와 관련없는 파일들의 요청, 윔의 로그 패턴, 취약점 분석프로그램에 의한 로그패턴을 분석한다.
Access Log: 클라이언트 요청에 의해 웹서버가 응답한 내용
Error Log: 웹서버에 오류가 발생했을 경우
2) Access_Log CLF(Common Log Format)
host: 클라이언트의 호스트명 또는 IP주소(127.0.0.1)
ident: 사용자 이름(-)
Authuser: 인증 요청된 사용자 이름(-)
Date and Time: 요청을 보낸 날짜와 시간([28/Oct/2022:07:52:24 -0400])
Request: 클라이언트가 보내온 요청 라인 정보(GET/icons/openlogo-75,png HTTP/1.1)
Status: 클라이언트 요청에 대한 처리 상태를 나타내는 상태코드전송(200)
Bytes: 서버에서 클라이언트로 전송된 응답 데이터의 크기(6040)
Referer: http://localhost/
User-agent: Mozilla/5.0
4. 보안서버 구축
1) 개념
인터넷 상에서 정보를 암호화하여 송수신하는 기능(SSL/TLS, 암호화 소프트웨어)이 구축된 웹서버를 의미한다.
보안서버 구축을 통해 Sniffing, 피싱을 방지할 수 있고 기업 신뢰도를 향상시킬 수 있다.
2) 보안서버 구축의 법적 근거
2.1) 정보통신망법 관련 방송통신위원회 고시 개인정보의 기술적 관리적 보호조치 기준
보안서버라 함은 정보통신망에서 송수신하는 정보를 암호화하여 전송하는 웹서버를 의미
정보통신서비스 제공자들은 개인정보 및 인증정보를 송수신할 때 안전한 보안서버 구축 등의 조치를 통해 이를 암호화 해야하며 보안서버는 다음 중 하나의 기능을 갖추어야 한다.
① 웹서버에 SSL(Secure Socket Layer)인증서를 설치하여 전송하는 정보를 암호화하여 송수신 하는 기능
② 웹서버에 암호화 응용프로그램을 설치하여 전송하는 정보를 암호화하여 송수신 하는 기능
③ 개인정보 및 인증정보란 고유식별정보(주민등록번호, 여권번호, 운전면허번호, 외국인등록번호), 신용카드, 계좌번호, 비밀번호, 바이오정보를 말한다. ⭐
2.2) 개인정보보호법 관련 행정자치부 고시 개인정보의 안전성 확보조치 기준
개인정보(고유식별정보(주민등록번호, 여권번호, 운전면허번호, 외국인등록번호), 비밀번호, 바이오정보)를 정보통신망을 통하여 송수신할 경우 암호화 하여야 한다.
5. SSL/TLS 관련 보안 가이드
1) SSL/TLS 서버 인증서 생성 시 보안 가이드
키쌍(공개키-개인키) 생성 시 2048-Bit 이상의 키를 사용하고 서버 개인키에 대한 접근은 최소화하며 안전하게 관리한다.
인증서 발급 시 인증서 서명 알고리즘을 SHA-2(256-Bit) 이상으로 설정한다.
서브도메인을 명시하지 않은 경우(*.tistory.com) 임의의 서브도메인 인증서(info.tistory.com)로 악용될 수 있기 때문에 반드시 필요한 경우가 아니라면 서브도메인을 정확히 명시(peemang.tistory.com)하도록 한다.
openssl genrsa -aes128 -out peemang private.key 2048
2) OpenSSL 라이브러리 보안 가이드
취약점이 발견된 OpenSSL 라이브러리 버전을 사용할 경우 보안 업데이트를 수행한다.
관련 기사: https://zdnet.co.kr/view/?no=20221031110117
3) SSL/TLS 웹서버 설정 보안가이드(httpd.ssl.conf, ssl.conf)
SSL2.0, SSL3.0 프로토콜을 비활성화 하고 TLS1.0 이상의 프로토콜을 사용하도록 한다.
SSLProtocol all -SSLv2 -SSLv3 #BlackList
SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2 #WhiteList
취약한 암호방식을 사용하는 암호도구목록을 제거한다.
ALL: 지원 가능한 모든 Cipher Suite 사용
!aNULL: 인증을 하지 않는 Cipher Suite 제거 (a=authentication)
!eNULL: 암호화를 하지 않는 Cipher Suite 제거(e=encryption)
!EXP: 약한 암호키를 사용하는 수출용 Cipher Suite 제거
!ADH: ADH(Anonymous Diffie-Hellman) Cipher Suite 제거
!DES, !RC4, !MD5: 취약한 알고리즘 및 해시 알고리즘을 사용하는 Cipher Suite 제거
SSLCipherSuite ALL:!aNULL:!eNULL:!EXP:!DES:!RC4:!MD5
'Certification Study > 정보보안기사' 카테고리의 다른 글
[정보보안기사] 웹어플리케이션 보안 (1) | 2022.10.28 |
---|---|
[정보보안기사] HTTP 개념 (0) | 2022.10.19 |
[정보보안기사] 네트워크 개념 (4) | 2022.10.13 |
[정보보안기사] 접근통제 보안위협 및 대응책 (0) | 2022.10.12 |
[정보보안기사] 윈도우 서버 보안 (0) | 2022.10.12 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊