정보보안(구버전)/DVWA 2019. 3. 10. 12:01
DVWA - 08. Remote Execution Shellshock 공격 패턴 분석 및 스노트 룰 설정
본 내용은 DVWA를 이용한 OWASP Top10 취약점 진단 및 웹-해킹 내용이 아니라, Snort를 이용한 DVWA 취약점 및 공격 패턴을 진단하는 실습 환경입니다.
1. Using Known Vulnerable Components
- OWASP Top10 A9 - 알려진 취약점이 있는 구성 요소 사용
- 슈퍼유저 권한으로 운영되는 취약한 라이브러리/프레임워크, 기타 SW 모듈로 인한 데이터 유실 및 서버 권한 획득이
가능한 취약점이다.
2. Shellshock Vulnerability(CGI)
- Bash Shell : 사용자가 CLI 기반에서 명령어를 입력하면 운영체제가 이에 대응하는 동작하게 하는 명령어 해석기이다.
- Bash Shell Bug : Bash로 해당 명령을 실행했을때, 그에 대응하는 결과 뿐만 아니라, 다른 결과까지 실행되는 버그이다.
- Bash Shell Bug 관련 기사
http://www.edaily.co.kr/news/NewsRead.edy?SCD=JE41&newsid=01387446606224712&DCD=A00504&OutLnkChk=Y
http://www.ddaily.co.kr/news/article.html?no=122932
- exploit-db 사이트(https://www.exploit-db.com/)를 이용하여 Bash Shell Bug 관련된 내용을 찾아보도록 한다.
바로가기 : https://www.exploit-db.com/exploits/34765
Exploit Database Note:
|
env x='() { :;}; 명령어는 함수를 이용한 환경변수 설정의 기본 형식이다. 만약, 명령어 끝나는 ; 뒤에 명령어는 오류가 발생하거나, 실행되지 않는게 원칙이다. 취약점이 있는 경우에는 echo vulnerable의 환경 변수를 이용하여 "echo this is a test" 를 실행하게 된다. 이때 { :;}; 에서 ':'는 참을 의미하기 때문에 무조건 함수가 실행된다.
다음과 같이 테스트를 실시한다.
root@kim-virtual-machine:/home/kim# env x='() { :;}; echo cisco' bash -c "echo this is a test"
cisco
this is a test
root@kim-virtual-machine:/home/kim# env x='() { :;}; cat /etc/passwd' bash -c "echo this is a test"
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
~ 중간 생략 ~
- 함수 선언 뒤에 임의의 명령어를 삽입했을 경우, 유효성 검증 단계 없이 명령어를 실행한다.
- Bash Shell Bug 취약점을 갖고 있는 대표적인 버전은 다음과 같다.
bash-4.2.45-5.el7_0.2
bash-4.1.2-15.el6_5.1
bash-4.1.2-15.el6_5.1.sjis.1
bash-4.1.2-9.el6_2.1
bash-4.1.2-15.el6_4.1
bash-3.2-33.el5.1
bash-3.2-33.el5_11.1.sjis.1
bash-3.2-24.el5_6.1
bash-3.2-32.el5_9.1
bash-3.2-32.el5_9.2
bash-3.0-27.el4.2
- 현재 Bash 버전을 확인한다.
root@kim-virtual-machine:/home/kim# dpkg -l bash
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-f/Unpacked/Failed-cfg/Half-inst/t-aWait/T-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii bash 3.2-0ubuntu16 The GNU Bourne Again SHell
3. Using Known Vulnerable Components - Shellshock Vulnerability(CGI)
- CGI가 발생하는 필드에 쉘 쇼크 코드를 입력하여 리버스 쉘을 획득하거나 다른 명령을 실행할 수 있다.
4. Remote Execution Shellshock 공격 패턴 분석
8-0. Remote Execution Shellshock.log
8-1. Remote Execution Shellshock 공격 패턴.txt
5. Snort 룰 설정
8-2. Remote Execution Shellshock 스노트 설정.txt
root@kim-virtual-machine:~# cd /etc/nsm/rules
root@kim-virtual-machine:/etc/nsm/rules#
root@kim-virtual-machine:/etc/nsm/rules# vi local.rules
# 8. Remote Execution Shellshock
:wq! |
인코딩 내용
문자열 |
ASCII 16진수 |
( |
28 |
) |
29 |
공백 |
20 |
{ |
7b |
\ |
5c |
~ |
7e |
/ |
2f |
pcre 내용
pcre |
내용 |
[=?&\x2f]\s*?\x28\x29\x20\x7b |
=() { = () { = () { ? () { ? () { |
[=?&\x2f] |
=, ?, &, / |
\s |
화이트 스페이스(스페이스, Tab) |
*? |
게으른 수량자 |
\x28\x29\x20\x7b |
() { |
pcre 내용-1
pcre |
^[^\r\n]*?HTTP\/1(?:(?!\r?\n\r?\n)[\x20-\x7e\s]){1,500}\n[\x20-\x7e]{1,100}\x3a [\x20-\x7e]{0,500}\x28\x29\x20\x7b | |||
내용 |
HTTP/1~aaa aaa: () { |
HTTP/1~aaa
aaa: aaa () { |
HTTP/1~aaa aaa:aaa() { |
HTTP/1~aaa aaa:aaa () { |
pcre 내용-2
pcre |
내용 |
^[^\r\n]*?HTTP\/1 |
HTTP/1 aaaHTTP/1 aaa HTTP/1 aaa HTTP/1 |
^[^\r\n] |
문자열 시작이 개행 문자를 제외한 나머지 |
*? |
게으른 수량자 |
HTTP\/1 |
HTTP/1 |
pcre 내용-3
pcre |
내용 |
^[^\r\n]*?HTTP\/1(?:(?!\r?\n\r?\n)[\x20-\x7e\s]){1,500} | |
HTTP/1~aaa HTTP/1 ~aaa HTTP/1~ aaa HTTP/1 ~ aaa aaaHTTP/1 ~ aaa aaa HTTP/1 ~ aaa aaa HTTP/1 ~ aaa | |
?: |
뒤에 있는 것들'(?!\r?\n\r?\n)[\x20-\x7e\s]'을 그룹화 실시, 이때 ?는 수량자 X |
?! |
부정 전치탐색, 앞에 'HTTP/1'이 있고, 뒤에 '\r?\n\r?\n'이 없을 경우만 매칭 |
HTTP\/1(?!\r?\n\r?\n) |
즉, HTTP/1 다음에 개행(줄바꿈,엔터)가 없어야 매칭됨 |
\x20 |
공백 |
\x7e |
~ |
\s |
화이트 스페이스(스페이스, Tab) |
[\x20-\x7e\s] |
공백부터 ~ 까지(모든 문자열) 공백orTab |
{1,500} |
문자 개수가 1개에서 500개 수량자, 앞에 그룹에 적용됨 |
HTTP\/1(?:(?!\r?\n\r?\n)[\x20-\x7e\s]){1,500} |
HTTP/1 뒤에 개행이 없으며, 모든 문자열/공백이 1글자에서 500글자까지 매칭 |
pcre 내용-4
pcre |
내용 |
\n[\x20-\x7e]{1,100}\x3a |
개행(줄바꿈,엔터)가 있으며, 모든 문자열/공백이 1글자에서 100글자까지 매칭하며, 뒤에 :
aaa: aaa : |
\n |
개행 문자, 줄바꿈 |
[\x20-\x7e] |
공백부터 ~ 까지(모든 문자열) |
{1,100} |
문자 개수가 1개에서 100개까지 |
\x3a |
: |
pcre 내용-5
pcre |
내용 |
[\x20-\x7e]{0,500}\x28\x29\x20\x7b |
aaa ()공백{ aaa |
[\x20-\x7e] |
공백부터 ~ 까지(모든 문자열) |
{0,500} |
문자 개수가 0개에서 500개까지 |
[\x20-\x7e]{0,500} |
모든 문자열/공백이 0글자에서 500글자까지 매칭 |
\x28\x29\x20\x7b |
()공백{ |
[참고] CRLF
라인피드(LF : Line Feed) : 현재 위치에서 바로 아래로 이동
캐리지리턴(CR: Carriage Return) : 커서의 위치를 앞으로 이동
root@kim-virtual-machine:/etc/nsm/rules# rule-update
'rule-update' 에러가 발생하면, 'local.rules' 파일을 수정한 이후 실시함
root@kim-virtual-machine:/etc/nsm/rules# nsm --sensor --restart --only-snort-alert |
6. DVWA 'Remote Execution Shellshock' 취약점 진단 실시
vulnerabilities 우클릭 -> 공격 -> 'Active Scan' 클릭
Policy 선택 -> 'Start Scan' 버튼 클릭
7. Snort 탐지 결과 확인 및 분석
Snort -> 'Show Packet Data' & 'Show Rule'를 체크하여 스노트 탐지 분석 실시
8. Snort 룰 삭제 또는 주석 처리 실시
[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)
DVWA - 08. Remote Execution Shellshock 공격 패턴 분석 및 스노트 룰 설정 https://youtu.be/XHIEarG_voM
'정보보안(구버전) > DVWA' 카테고리의 다른 글
DVWA - 10. Remote Code Execution(PHP-CGI) 공격 패턴 분석 및 스노트 룰 설정 (0) | 2019.03.10 |
---|---|
DVWA - 09. Source Code Disclosure(PHP-CGI) 공격 패턴 분석 및 스노트 룰 설정 (0) | 2019.03.10 |
DVWA - 07. Directory Browsing 공격 패턴 분석 및 스노트 룰 설정 (0) | 2019.03.10 |
DVWA - 06. Path Traversal 공격 패턴 분석 및 스노트 룰 설정 (0) | 2019.03.10 |
DVWA - 05. XSS Injection 공격 패턴 분석 및 스노트 룰 설정 (0) | 2019.03.10 |