일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- System
- 네트워크
- Shell code
- pwnable
- Buffer Overflow
- wargame
- SQL
- hacking
- system hacking
- 웹해킹
- 해킹
- 정보처리기사 실기
- stack overflow
- 정보보안기사
- 정보보안기사 실기
- LOB
- OS
- Pwnable.kr
- Operating System
- webhacking.kr
- 운영체제
- Spring
- 워게임
- PWN
- Lord of BOF
- Payload
- Spring MVC
- webhacking
- BOF
- Spring Framework
- Today
- Total
DongDD's IT
[정보보안기사 실기] 어플리케이션 보안 - 웹 서버, 데이터베이스 취약점 본문
[정보보안기사 실기] 어플리케이션 보안 - 웹 서버, 데이터베이스 취약점
디렉토리 인덱싱/리스팅 취약점
- 인덱싱 기능이 활성화되어 있는 경우, 공격자가 강제 브라우징을 통해 모든 디렉토리, 파일에 대한 인덱싱이 가능하게 되어 서버의 주요 정보가 노출될 수 있는 취약점
공격 방식
- URL에 페이지 이름이 명시하지 않고 디렉토리만 명시하여 확인
- 디렉토리, 파일을 볼 수 있다면 취약점이 존재하는 것으로 볼 수 있음
대응 방법
1. 아파치 웹 서버 설정 파일(httpd.conf)에서 디렉토리 인덱싱/리스팅 제한
- Options에 -indexes 추가
-> 인덱싱/리스팅 시도 시 403 Forbidden 응답을 받음
2. 윈도우 IIS 웹 서버에서 디렉토리 인덱싱/리스팅 제한
- IIS 등록 정보의 홈 디렉토리 탭에서 '디렉토리 검색' 기능 해제
3. Tomcat 웹 서버에서 디렉토리 인덱싱/리스팅 제한
- 설정 파일 web.xml에서 서블릿 파라미터 설정에 listings를 false로 설정
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
웹 서비스 메소드 취약점
- PUT, DELETE, OPTIONS 등 불필요한 메소드를 허용할 경우 공격자가 이를 이용해 파일을 생성하거나 삭제, 수정이 가능한 취약점
공격 방식
- telnet을 통해 80 port에 접속해 OPTIONS 메소드를 요청 메시지로 보내면 OPTIONS를 지원할 경우 Allow 필드에 지원 가능한 메소드 리스트를 보여줌
- 사용 가능한 메소드를 이용해 공격
대응 방법
1. 아파치 웹 서버 설정 파일(httpd.conf)을 이용해 메소드 제한
- GET, POST 이외의 메소드 제한
<Limit-Except GET POST>
Order allow, deny
Deny from all
</Limit-Except>
2. OPTIONS 메소드를 통해 제한된 메소드 확인
- OPTIONS 메소드가 차단되면 요청 시 403 Forbidden 응답을 받음
관리자 페이지 노출 취약점
- 관리자 페이지가 추측 가능한 형태로 되어있으면 쉽게 접근할 수 있고 Brute Force를 통해 관리자 권한을 획득할 수 있는 취약점
공격 방식
- admin.php, manager.php 등 추측 가능한 관리자 페이지 이름을 이용해 관리자 페이지를 찾음
대응 방법
1. 관리자 페이지 이름을 추측하기 어렵게 만듬
2. 관리자 페이지 접근 제어 설정
- httpd.conf에서 설정(Deny->Allow 순)
<Directory "directory_name">
Order deny, allow
Deny from all
Allow 허용IP
</Directory>
-> 허용되지 않은 IP로 접속 시 403 Forbidden 응답을 받음
위치 공개 취약점
- 소스 코드 수정 시 자동으로 로그 파일, 백업 파일이 생성되어 노출되는 경우, 공격자가 유추 후 직접 접근을 요청해 핵심 정보를 획득할 수 있는 취약점
공격 방식
- 웹 서버에 존재할만한 중요 파일을 유추해 다운로드, 정보 확인
대응 방법
1. 불필요한 파일 삭제, 적절한 접근제어 설정
- httpd.conf 파일을 통해 접근 제어 설정
<Files ~ "/.확장자명$">
Order allow, deny
Deny from all
</Files>
-> 허용되지 않은 파일 접근 시 403 Forbidden 응답을 받음
아파치 웹 서버 보안 대책
웹 서비스 최소 권한 사용자 운영
- 보안 취약점으로 권한 탈취가 발생할 가능성이 항상 존재하기 때문에 위험을 최소화하기 위해 최소한의 권한을 가진 사용자 아이디와 그룹으로 웹 서버 구동
1. 대응 방법
1) 웹 서버 실행 계정을 생성 후 로그인할 수 없게 함
- apache 아이디와 Apache 그룹을 생성해 로그인 쉘을 /bin/false or /sbin/nologin으로 설정해 로그인이 불가능하게 설정
2) httpd.conf에서 서비스 프로세스의 실행 권한을 해당 계정(apache)으로 설정
- 권한 탈취가 되더라도 root가 아닌 apache 계정으로 접근되기 때문에 피해를 최소화할 수 있음
심볼릭 링크 사용 설정 제거
- 심볼릭 링크를 허용하는 경우, 허용하는 디렉토리 외에 다른 디렉토리를 참조하는 링크를 액세스할 수 있는 취약점이 존재함
1. 대응 방법
- httpd.conf 파일에서 심볼릭 링크 차단
- Options에 -FollowSymLinks 추가
-> 심볼릭 링크를 통한 접근 시 403 Forbidden 응답을 받음
헤더 정보 최소화
- 웹 서버와 통신 시, 웹 서버는 응답 메시지의 헤더에 웹 서버 버전이나 응용 프로그램 버전을 보내는데 이러한 정보는 공격자가 공격하는데 유용한 정보를 제공하게 됨
1. 대응 방법
1) httpd.conf 파일에서 ServerTokens를 Prod로 설정
- ServerTokens [설정]
- 설정
-> Prod : 웹 서버 종류
-> Min : Prod + 버전 정보
-> OS : Min + OS 정보
-> Full : OS + 응용 프로그램 정보
httpd.conf 주요 내용
1. ServerRoot "directory"
- 웹 서버의 홈 디렉토리 설정(절대 경로)
2. PidFile "pid 설정 파일"
- 웹 서버가 실행될 때 PID를 기록한 파일의 위치 설정(ServerRoot 기준 상대 경로)
3. Listen port
- 웹 서버 데몬의 리스닝 포트
4. ServerTokens 설정
5. ServerAdmin 관리자메일주소
- 웹 문서 로딩 시 에러가 발생하면 보여줄 관리자 메일 주소
6. User user_name
Group group_name
- 서비스 제공 작업 프로세스의 실행 User, Group 지정
- 권장 : root가 아닌 제한된 권한을 가진 nobody or 어플리케이션 계정 지정
7. Timeout N
- 타임 아웃을 N초로 설정
8. MaxClient N
- 최대 N개의 클라이언트와 동시 연결 가능
9. KeepAlive On/Off
- On : Client와 연결된 작업 프로세스가 지속적인 요청 작업을 게속 처리
- Off : 요청 시 마다 새로운 작업 프로세스가 처리
10. MaxKeepAliveRequest N
- KeepAlive가 On일 때, 요청 작업의 최대 갯수
- N을 초과하면 현재 프로세스를 종료하고 다른 프로세스가 처리
11. KeepAliveTimeout N
- KeepAlive가 On일 때, 설정한 시간 N초 동안 요청이 없으면 해당 프로세스 연결 종료
웹 로그 분석
목적
- 접속 사용자의 행위/취향 분석
- 보안 사고 발생 시 증거 자료로 사용
- 보안 사고 발생 전 이상 징후, 해킹 시도, 해킹 성공 여부 확인
- 다양한 웹 공격 패턴 파악
- 접속 시간, 접근 파일 정보, 사용자 정보 등 확인
HTTP 요청 메시지
1. 요청 메시지 포맷
<요청 라인> : 메소드 URI HTTP버전
<헤더 필드> : 필드명1 : 필드값2
필드명2 : 필드값2
<빈 라인> : 헤더 정보의 끝을 의미
<요청 메시지 바디> : GET 방식의 경우 요청 데이터가 없으므로 메시지 바디가 없음
2. Query String
- ?field1=value1&field2=value2 의 형태로 URL을 통해 전달
3. 요청 메소드
- GET : URI로 지정된 리소스를 서버에 요청
- POST : URI로 지정된 리소스에 데이터를 전달해 처리한 결과를 서버에 요청
- HEAD : GET 방식과 유사, 응답에 실제 리소스없이 헤더만 있음
- OPTIONS : 서버가 지원하는 메소드 확인
- CONNECT : 웹 서버를 프록시로 사용해 클라이언트-웹 서버간 터널링 목적으로 이용
- PUT : 요청에 포함된 데이터를 서버에 저장
- TRACE : TRACE 요청을 수신한 서버는 수신한 요청을 메시지 형태로 클라이언트에 전송
- DELETE : 요청 리소스 삭제
HTTP 응답 메시지
1. 응답 메시지 포맷
<상태 라인> : HTTP버전 상태코드 응답문구
<헤더 필드> : 필드명1 : 필드값1
필드명2 : 필드값2
<빈 라인> : 헤더 정보의 끝을 의미
<응답 메시지 바디> : 서버에서 클라이언트로 전송하는 데이터 포함
2. 상태 코드
1) 1xx : Information
- 100(Continue) : 클라이언트에게 일부 정보를 받았고 이후 정보 계속 요청
2) 2xx : Success
- 200(OK) : 요청이 성공
- 201(Created) : PUT 메소드에 의해 서버에 파일이 생성됨
- 202(Accepted) : 웹 서버가 명령을 수신
3) 3xx : Redirection
- 301(Move Permanently) : 요청된 정보 위치가 변경됨(Location 헤더 필드에 변경 URL을 적어서 응답)
- 302(Found) : 일반적인 정보 위치 변경(Location 헤더 필드에 변경 URL을 적어서 응답)
- 304(Not modified) : 요청된 정보가 변경되지 않았음(로컬 캐시 정보 이용)
4) 4xx : Client Error
- 400(Bad Request) : 잘못된 요청으로 처리 불가
- 401(Unauthorized) : 인증이 필요한 페이지 요청
- 403(Forbidden) : 접근 권한이 없음
- 404(Not Found) : 요청한 페이지가 없음
5) 5xx : Server Error
- 500(Internal Server Error) : 내부 서버 오류
웹 로그 구조
1. 웹 로그 종류
- NCSA CLF(Common Log Format) : Apache, Tomcat의 기본 포맷
- NCSA ELF(Extended Log Format) : CLF에 Referer, User-Agent 값이 포함된 포맷
- W3C ELF : Referer, User-Agent, Cooket 및 사용자 정보를 추가로 남길 수 잇는 포맷(IIS에서 사용)
2. 웹 로그 포맷
- Host : Client 호스트명/IP주소
- Ident : Client 사용자 이름(보통 "-" 사용)
- Authuser : 인증이 요청된 원격 사용자 이름(보통 "-" 사용)
- Date and Time : 요청을 보내는 시간 정보(dd/mm/yyyy:hh:mm:ss)
- Request : Client가 보낸 요청 라인 정보
- Status : Client의 요청 처리 상태를 나타내는 상태 코드
- Bytes : 서버->클라이언트 데이터 전송량(헤더 제외)
- Referer : 요청된 URL이 참조되거나 링크된 URL
- User-Agent : 클라이언트 OS 및 브라우저 버전 정보
보안 서버 구축
- 보안 서버(Security Server) : 인터넷 상에서 정보를 암호화하여 송수신하는 기능이 구축된 웹 서버
- 이미 구축된 웹 서버에 SSL/TLS 인증서나 암호화 소프트웨어를 설정해 암호화 통신을 지원하는 것을 의미
필요성
1. 정보 유출 방지(Sniffing 방지, 기밀성)
- 암호화 통신으로 외부 노출 위협을 방지
2. 위조/가짜 사이트 방지(Phishing 방지)
- SSL/TLS 인증서로 증명하여 위조 사이트 식별
3. 기업 신뢰도 향상
- 사용자에게 정보 보호의 신뢰성을 확인 시켜줌
SSL/TLS 보안가이드
1. SSL/TLS 서버 인증서 생성 시 보안가이드
1) 키 쌍 생성 시 2048 bit 이상의 키를 사용하고 서버 개인키에 대한 접근은 최소화하고 안전하게 관리
- openssl을 이용해 RSA 서버 개인키 생성
-> openssl genrsa -aes128 -out name private.key 2048
2) 인증서 발급 시 인증서 서명 알고리즘을 SHA-2(256bit)이상으로 설정
- SHA-1 해시 알고리즘 사용 시 취약할 수 있음
3) 인증서 발급 시 주체(Subject)/소유자의 CN(Common Name)을 서브 도메인까지 명시
- 서브 도메인을 명시하지 않으면 임의의 서브 도메인 인증서로 악용될 수 있음
- URL과 서버 인증서의 주체 CN이 일치하지 않으면 브라우저에서 경고 메시지 표시
- 주체 CN에 IP주소를 명시해 IP 주소 기반 접속 가능(서버의 IP주소가 바뀌면 재발급해야함)
4) 신뢰할 수 있는 인증 기관을 통해 인증서 발급
- 신뢰할 수 있는 인증기관에서 발급한 인증서가 아니면 브라우저에서 경고 메시지 표시
2. OpenSSL 라이브러리 보안가이드
1) 취약점이 발견된 OpenSSL 라이브러리를 사용할 경우 보안 업데이트 수행
- openssl version or openssl version -a로 확인
3. SSL/TLS 웹 서버 설정 보안가이드
1) 취약한 SSL2.0, SSL3.0을 비활성화하고 TLS1.0~TLS2.0을 사용
- httpd-ssl.conf or ssl.conf 설정 파일 수정
-> SSLProtocol all -SSLv2 -SSLv3 : SSLv2와 SSLv3을 제외한 모든 프로토콜 사용
-> SSLProtocol -all +TLSv1 +TLSv1.1 TLSv1.2 : TLSv1, TLSv2, TLSv3 프로토콜만 사용
2) 취약한 암호 방식을 사용하는 Cipher Suite(암호 도구 목록)을 제거
- httpd-ssl.conf or ssl.conf 설정 파일 수정
-> SSLCipherSuite ALL:!aNULL:!eNULL:!EXP:!ADH:!DES:!RC4
-> 암호 도구 목록 지정, 구분자로 ':' 사용
-> ALL : 모든 Cipher Suite 사용
-> !aNULL : 인증을 하지 않은 Cipher Suited 제거(Authentication)
-> !eNULL : 암호화를 하지 않는 Cipher Suite 제거(Encryption)
-> !EXP : 약한 암호키를 사용하는 수출용 Cipher Suite 제거
-> !ADH : ADH(Anonymous Diffie-Hellman) Cipher Suite 제거
-> !DES, !RC4 : 해당 알고리즘을 사용하는 Cipher Suite 제거
데이터베이스(My-SQL) 취약점
- 오라클에서 개발한 오픈 소스 관계형 DBMS
- My-SQL 최초 설치 시 "mysql"이라는 데이터베이스 생성
-> user table : 전체 데이터베이스에 적용되는 사용자 정보와 권한 정보
-> host table : 호스트 전체에 대한 데이터베이스 접근 권한 정보
-> db table : 각 데이터베이스에 대한 접근 권한 정보
-> table_priv table : 테이블에 대한 접근 권한 정보
-> columns_priv table : 테이블 컬럼에 대한 접근 권한 정보
My-SQL DBMS 취약점 점검
1. root의 패스워드 및 계정명을 변경
- 초기 패스워드 : 빈 값
- update 구문을 통해 password 변경
- flush privileges 명령으로 즉시 반영
2. My-SQL 설치 시 자동으로 생성되는 mysql 계정의 로그인 차단
- mysql 계정에 대한 관리가 소홀하면 이 계정을 이용해 침투하는 경우가 발생
- /etc/passwd 파일에서 로그인 쉘을 /bin/false or /sbin/nologin을 설정해 로그인이 불가능하도록 설정
3. 원격에서 My-SQL 서버로의 접속을 차단
- 디폴트 서비스 포트 TCP 3306을 차단해 로컬에서만 접근 가능하게 설정
-> my.cnf 설정 파일에서 "skip-networking"을 추가
4. 데이터베이스 사용자 별 접속/권한 설정
- user table의 host 컬럼을 조회해 접속 허용 호스트를 확인 후 적절하게 수정
- 일반 사용자의 File, Process, Shutdown 권한 제어
-> Select_priv, Insert_priv, Update_priv, Delete_priv : 각 명령 수행 권한
-> Create_priv, Drop_priv : Create, Drop문 수행 권한
-> File_priv : 파일에 데이터를 읽고 쓸 수 있는 권한(Select into outfile 출력 파일명, load data infile 입력 파일명)
-> Process_priv : 프로세스/스레드 정보를 보거나 중지시킬 수 있는 궈한(show processlist 명령으로 확인)
-> Shutdown_priv : mysqladmin shutdown 명령으로 서버를 종료시킬 수 있는 권한
5. My-SQL 버전 확인 및 보안패치 적용 여부 점검
- mysql -V or mysql --version 명령으로 버전을 확인한 후 적절한 보안패치 수행
6. My-SQL 데이터 디렉토리 보호 여부 점검
- 테이블의 데이터 및 로그를 저장하는 파일이 My-SQL 데이터 디렉토리에 저장됨
-> 디렉토리 권한 설정을 잘못한 경우 노출
- my.cnf 설정 파일을 통해 경로 확인 후 권한 수정(750)
'자격증 > 정보보안기사' 카테고리의 다른 글
[정보보안기사 실기] 각종 취약점 및 도구 (0) | 2018.05.15 |
---|---|
[정보보안기사 실기] 침입 탐지 시스템, 침입 차단 시스템, 보안 도구 (0) | 2018.05.12 |
[정보보안기사 실기] 어플리케이션 보안 - 웹 취약점 (0) | 2018.05.09 |
[정보보안기사 실기] 어플리케이션 보안 - 기초 (0) | 2018.05.07 |
[정보보안 기사] 네트워크 보안 - 보안 (0) | 2018.04.29 |