이번 안철수 연구소에서 매월 나가는 "안"에서 내 문서가 올라갔다. 다시 정리해서 올릴까 했는데...

거참..  분량도...  또 사진도 많았다...  그리하여 아래 내용은 그림파일로 올림  -_-;;

사용자 삽입 이미지


'Forensics' 카테고리의 다른 글

ENCE 준비 1. 시험 신청  (0) 2011.03.09
침해대응시 사용하는 스크립트 툴  (0) 2011.02.10
x-way forensic으로 파일 복구하기  (0) 2010.09.24
정규표현식 2회  (0) 2010.04.05
쓸만한 무료 웹 스캐너 Skipfish  (0) 2010.04.05
Posted by 도시형닌자
:

알아둬야 하는 데이터 전송기술에 따른 전송속도 및 용도

전송기술 전송속도(Data Rate) 전송매체 용도
이동전화 서비스 9.6 ~ 14.4Kbps RF in space(wireless) 이동전화
High-speed Circuit-switched
Data service(HSCSD)
Up to 56 Kbps RF in space(wireless) 이동전화(무선 데이터통신)
유선전화 Up to 56 Kbps Twisted-pair 가정 및 직장용
56 Kbps Frame Relay 56 Kbps Variety 영업용
DS0 64 Kbps ALL 디지털 신호 레벨 세트에서
기본 채널
ISDN 기본군 접속(BRI) : 64Kbps to 128Kbps BRI : Twisted-pair BRI : 고속회선이 필요한 SOHO
일차군 접속(PRI) : 23(T-1) or 30(E1) assignable 64 Kbps channels Plus control channel; Up to 1.544 Mbps
(T-1) or 2.048(E1)
PRI : T-1 or E1 Line PRI : 대규모 회사
IDSL
(ISDN Digital Subscriber Line)
128 Kbps Twisted-pair 고속회선이 필요한 SOHO
AppleTalk 230.4 Kbps Twisted-pair Apple 컴퓨터의 LAN
Satellite 400 Kbps (DirecPC) RF in space(wireless) 고속회선이 필요한 SOHO
Frame Relay 56 Kbps to 1.544 Mbps Twisted-Pair / Coaxial cable 대규모 회사의 LAN을 위한 백본
DS1/T-1 1.544 Mbps Twisted-pair / Coaxial cable
Optical Fiber
대규모 회사의 LAN을 위한 백본
E1 2.048 Mbps Twisted-pair / Coaxial cable
Optical Fiber
32-channel 유럽 시스템
T1C(DS1C) 3.152 Mbps Twisted-pair / Coaxial cable
Optical Fiber
대규모 회사의 LAN을 위한 백본
DS2/T-2 6.312 Mbps Twisted-pair / Coaxial cable
Optical Fiber
대규모 회사의 LAN을 위한 백본
Digital Subscriber Line (DSL) 512 Kbps to 8 Mbps Twisted-pair (디지털 광대역) SOHO(현존하는 구리선 이용)
E2 8.448 Mbps Twisted-pair / Coaxial cable
Optical Fiber
4개의 E1신호 전송
Cable Modem 512 Kbps to 52 Mbps
(see key and explanation)
Coaxial cable (몇몇 시스템에서Return Channel로 전화선 사용) 가정, 회사, 학교
Ethernet 10 Mbps 10Base-T(Twisted-pair)
10Base-2/5(Coaxial Cable)
10Base-F(Optical Fiber)
가장 흔한 LAN형태
E3 34.368 Mbps Twisted-pair / Optical Fiber 6개의 E1 신호 전송
DS3/T-3 44.736 Mbps Coaxial Cable 인터넷 인프라 내의
소규모 ISP Link
OC-1 51.84 Mbps Optical Fiber 인터넷 인프라 내의
소규모 ISP Link
Fast Ethernet 100 Mbps 100Base-T4(Twisted-pair)
100Base-TX(Twisted-pair)
100Base-FX(Optical Fiber)
Fast Ethernet LAN에
접속하는 Workstations
FDDI 100 Mbps Optical Fiber 대규도 광대역 LAN 또는
대규모 ISP
T-3D 135Mbps Optical Fiber 인터넷 인프라 내의
소규모 ISP Link
E4 139.264 Mbps Optical Fiber 4개의 E3채널 전송
OC-3/STM-1 155.52 Mbps Optical Fiber 대규모 회사 인터넷 백본
E5 565.148 Mbps Optical Fiber 4개의 E4채널 전송
OC-12/STM-4 622.08 Mbps Optical Fiber 인터넷 백본
Gigabit Ethernet 1 Gbps Optical Fiber
(& "Cooper" up to 25 Meters)
Gigabit Ethernet 접속
Workstation 네트워크
OC-24 1.244 Gbps Optical Fiber 인터넷 백본
SciNet 2.325 Gbps
(15 x OC-3 Line)
Optical Fiber 고속 백본 네트워크 서비스
(vBNS) 구성
OC-48/STM-16 2.488 Gbps Optical Fiber 인터넷 백본
OC-192/STM-64 10 Gbps Optical Fiber 백본

'Networks' 카테고리의 다른 글

초간단 wireshark 사용법  (1) 2011.02.10
Colasoft packet Builder  (1) 2010.05.04
Posted by 궁상박군
:

작성 순서

1. 개요 공격 시나리오

2. 동적 악성코드 분석

3. 악성코드 유포지 추적을 위한 정보수집 단계 #1

4. 악성코드 유포지 추적을 위한 정보수집 단계 #2

5. 공개툴을 통한 스크립트 제작

6. 완성된 스크립트를 통한 악성코드 분석 및 유포지 추적


도메인 만료기간이 다 되어가는데 도루묵은 신세한탄만 하고 있고, 저도 다른 일 해보겠다고 이직하는 바람에 이것저것 정신없다는 핑계로 안들어온지 꽤 되었네요; 다녀가신 분들은 좀 있는 것 같은데 코멘트는 없고, 가끔 물어보는 메일만 날라오네요


신년도 되었고 시간의 여유가 있을 때 마다 글을 조금 써보려고 합니다.(이건 작년에도 마음먹었던 일인데 말이죠;)


음.. 이렇게 시작하죠

DDoS가 발생했습니다. 공격이 발생했으면

첫째, DDoS 공격을 수행한 공격자가 존재하고

둘째, DDoS 공격을 받은 대상자가 존재하고(사이트 담당자 어쩔..ㅠ)

셋째, 공격을 차단하기 위해 즉각적인 분석을 수행할 CERT팀이 존재하고

넷째, 해당 바이러스의 패턴을 백신 엔진에 올리실 분들이 존재합니다.


네트워크 모니터링 장비(IPS/IDS, A사의 Peak어쩌구, N사의 DD어쩌구등등) 통해 DDoS 공격확인시 대상 사이트 담당자는 급당황을 하거나 내부적인 프로세스에 의해 DDoS 방어 업무 프로세스를 수행하고 상위 업체인 ISP에서는 Dst IP 트래픽을 우회하거나 null0 routing 수행하는 등의 활동을 수행합니다.

또한 ISP 보안관제 Cert팀에서는 해당 공격의 Src IP 조사하여 가입자와의 통화를 시도하게 되죠. "해당 PC 악성코드가 감염이 같다. 분석에 협조해달라" 협조에 의한 가입자의 PC 원격분석 시도하고 C&C Domain이나 IP 있으면, KISA등의 상급기관에 보고하거나 내부적으로 차단을 수행하게 됩니다.


여기서 모든 것들이 바로바로 이루어져야 하지만, C&C Domain이나 IP등을 찾기 위해 원격분석에 걸리는 시간은 여러가지 주변요인에 의해 시간이 많이 지체되곤 합니다(여러가지 주변 요인 : 컨텍한 가입자의 PC 엄청난양의 트래픽을 발생시키고 있거나 PC성능에 따른 latency, 가입자의 분석요청 거절, 분석자의 기술력 ) 또한, 무한의 시간을 가지고 좀비PC 원격으로 분석할 있는 것도 아니죠…. 컨텍한 사람이 "아놔 스타해야함" or "밖에 나가야함" 시간은 한정되어 있습니다.


위에서 잠깐 언급하였지만 C&C 통해서 이루어지는 공격이라면 ISP단에서 C&C IP 차단하거나 Domain 차단하는 방법이 "그나마" 빠른 DDoS 대응이라고 있겠습니다. 악성코드가 퍼진건 어쩔 없는 부분이지만 당장 공격은 안일어나게 있으니까요;

또한 분석시간도 좀비PC 원격으로 붙어서 netstat 명령어랑 wireshark 트래픽 보고 iceSword 프로세스 보면 악성코드 추출과 C&C 확인은 설치시간 빼고 5분도 안걸리죠.. 찾은거 바로 차단하면 됩니다. ~ 빠르죠

하지만 '09 7 7일에도 그랬듯이  C&C가 없는 공격이거나… '10 2분기부터 달리기 시작했던 다음의 DDoS 시나리오의 공격은 ISP에서의 차단을 우회하게 됩니다.


* C&C 차단이 애매한(?) 공격 시나리오

사용자 삽입 이미지


Attacker가 웹디스크나 p2p Self-Extract(이하 SFX) 기능으로 동영상과 악성코드를 묶어 exe파일 형태로 업로드합니다.

요즘에 저작권이다 뭐다 해서 exe파일로 압축파일을 올리는 경우가 많이 있습니다.(성인물로 배포되는 형태가 많습니다) malware.exe, 동영상.avi파일 두개에 대해서 SFX압축을 한다고 가정시 옵션에서 더블클릭이라는 마우스 이벤트가 일어남과 동시에 malware.exe 실행되도록 조정을 해놓습니다.

당연히 디자인된 malware.exe 압축이 풀리고 실행되더라도 사용자의 눈에서 안보이도록 바로 삭제되도록 디자인되어 사용자는 해당 SFX압축을 해제하였을 경우 동영상.avi 보게 됩니다.

또한, 사람을 속여서 해당 파일을 다운받도록 해야하는데 해당 파일을 선택하여도 다음과 같이 파일이름을 길게 하면 끝의 확장자가 안보이는 경우도 많고, 아예 폴더로 올려서 "목록보기" 클릭해야만 파일 내역들을 확인할 있게도 합니다.

사용자 삽입 이미지

 

우선 사용자들은 해당 파일을 다운로드 경우 " 이거 확장자가 exe" 하면서 마우스 클릭해서 내부에 파일이 뭐가 있지 확인하는 사람이 몇이나 있을까요? 믿고서 압축을 해제하거나… 조금 이상하다 싶지만 받은 포인트가 아까워서 실행하게 됩니다.

Victim들이 해당 파일을 다운로드하여 클릭하는 순간 압축이 풀리게 되며 SFX 옵션에서 연결된 악성코드가 자동 실행되고 삭제되어 정상적으로 동영상 파일만 남는 것처럼 보여줍니다.



③ 악성코드에 감염된 Victim들이 Attacker C&C 서버 Domain DNS 서버에 질의하게 되며 5분간은 Local 설정된 DNS Server(자신이 사용하고 있는 ISP DNS서버등)으로 질의하게 되며, 결과값에 상관없이 국내,해외 DNS 서버군으로 질의를 하게됩니다.

해외 DNS Server에게 C&C Domain을 질의하게 해놓았으니… 국내 ISP에서 차단해봐야 다른 곳으로 질의하기 때문에 C&C 차단효과를 없습니다.

또한 분석자들을 낚는 효과(?) 얻는데 wireshark등을 통해 DNS 질의하는 것을 도메인과 IP 보지 어떤 DNS Server 질의하는지 확인하지 않는 경우가 많지요;



④ 감염된 Victim Group들이 DNS 서버로 질의했을 받은 IP 접속을 시도합니다. 그러나 Attacker 차단을 우회하기 위해 해외의 DDNS 서비스를 사용합니다. C&C 서버가 구동전에는 DDNS 서비스 업체에 따라 평상시에는 192.168.0.1 response하거나 IP Addr 값을 주지 않다가 Attacker DDNS 서비스에 로그인하여 구동하면 실제 IP 변경되어 접속하게 됩니다.

그러면 여기서 "그럼 C&C Domain 막지말고 IP 막으면 되겠네요"라고 있지만, C&C IP 순간순간 바뀌어 구동되며, Tor Proxy 같은 툴들을 통해서 자신의 아이피가 아닌 다른 아이피로 계속 변경이 가능하여 이것도 확실한 답은 아닐 있습니다.



이제 Attacker는 자신의 C&C서버를 통해 명령을 내리게 됩니다. 이때 Victim Group이 공격할 Target서버를 지정할 있으며, Victim들의 접속하는 C&C 서버를 변경하기 위해 다른 C&C 서버 Domain 내포하는 악성코드를 다운로드하는 지령을 전달할 수 있습니다



⑥ 악성코드에 감염되어 형성된 Zombie군들이 Attacker 전달한 Target 서버로 DDoS 공격을 수행합니다. 이때 공격 유형은 공격자가 원하는대로 Open Tear, UDP Flooding , ICMP Tear Drop 다양한 패턴으로 공격을 수행할 있습니다.


위의 경우처럼 공격을 하는 경우 Cert팀에서 분석을 수행하더라도 난감합니다 C&C 계속 변하고 차단할 없으니 이를 어쩐다…

백신 업체에서 시그니처 업데이트 한다 하여도 모든 좀비PC들에 백신이 설치되어있지 않은 이상 DDoS 계속 발생되겠죠.

그래서 생각한 것이 유포지를 추적해서 공격을 수행한 사람에 최대한 가깝게 다가가서 공권력 있는 기관에 신고하면 어케든 되겠지 했는데…;; 이것도 신고했는데 몇달간 계속 DDoS 엄청난 트래픽으로 발생되고 분석만 해보면 같은건이고;; ISP들은 다들 난리고.. 그랬던 경험이 있습니다. '09 7.7 DDoS 대란도 '09 7 5 해외쪽 공격했던 사실이 있어 6일날 보고했다가 "우리쪽 아니니까 문제 없자나" 소리도 들었었죠;; (..그래서 퇴사한건 아니에요 )


따라서 이번 블로그의 ""글은 정상적인 PC 좀비PC 밖에 없었던 이유.. , 어디서 악성코드를 다운받았고 어떤식으로 전파되어 PC 감염되었는지 등에 대해 수집해야할 정보들과 정보를 추출하는 방법.. 최종적으로는 원격지에서 스크립트를 실행하여 수집된 로그를 바탕으로 분석하는 내용에 대해서 논하고자 합니다.


도움이 되지 않을 있지만 저만의 노하우니까~ 가볍게 정보라도 가져가실 있다면 좋겠습니다.

'Malware Analysis' 카테고리의 다른 글

악성코드 수집  (0) 2010.03.21
RussKill  (0) 2010.01.06
Posted by 궁상박군
:
간만에 그냥 뻘글입니다.

이직하고나서 하는 작업이 주구장창 제안서 쓰고 동종(혹은 이종)장비간의 비교분석, 원론적인 기술들에 대한 정리들을 하다보니 문서를 굉장히 많이 만들게 됩니다

첫출근하고 나서 일주일뒤에 4명이서 골방에 틀어박혀 제안서를 작성한게 있는데 공유서버에다가 파일을 공유해서 사용하다보니 3일동안 만들었던 제안서중 일부파일이 날라가는 일이 발생했습니다.ㅠㅠ
(뭐..저는 신규입사자라 하는일은 별로 없었지만;; 다른분들이 고생하셔서..)

따라서 간만의 뻘글은 수동으로 파일을 복구 기술입니다(간단하게 퐈휘놜뒈히톼-상표보호- 같은 복구툴을 사용하셔도 되요)
따라하기 쉽게 Step별로 나열하였습니다(따라서 원론은 없어요)
//원론적이고 어떻게 돌아가는지 등에 대한 자세한 기술은 도루묵이 "언젠가" 포스팅하겠죠//

---------------------------잡담 끝

여기서 복구할 데이터는 d:\beethoven's Symphony No. 9(Scherzo).wma 파일입니다.

#1. D:\ 폴더에 해당 파일을 삭제하고서의 현재 D:\ 폴더 내용입니다. 당연히 음악파일은 없겠죠?
사용자 삽입 이미지

#2. X-way Forensic 구동!!
사용자 삽입 이미지

#3. 삭제된 파일이 위치한 하드디스크 드라이브 선택(단축기 F9)
사용자 삽입 이미지

#4. 복구할 데이터가 있는 위치(폴더)로 이동
사용자 삽입 이미지

#5. 해당 위치에서 복구할 파일들을 찾음(삭제된 파일이므로 파일이나 폴더 아이콘이 흐릿하게 보여요~)
사용자 삽입 이미지

#6. 복구할 파일을 마우스 우클릭 -> recover/copy를 선택합니다.
사용자 삽입 이미지

#7. 저장할 위치 지정(전 c:\로 했어요~) 후 OK 눌러주세요
사용자 삽입 이미지

#8. 자- 이제 c:\로 이동하여 복구되었는지 확인해봅시다
사용자 삽입 이미지

#9. 실행해봅시다. 음악이 재생될까요?
사용자 삽입 이미지


------------------------------------------------
X-Way forensic tool은 기능이 매우 다양합니다.
여기서 보여준 것은 정말 극히 일부의 기능중 하나만 사용하였습니다.
시간되시면 가지고 놀면서 공부도 하고 그러면 좋을 것 같습니다..


쓰고나니 작년에 ext3 파일 복구하는거 썼다가 이걸 어따 써먹냐고 한소리 들었던 기억이;;;

'Forensics' 카테고리의 다른 글

침해대응시 사용하는 스크립트 툴  (0) 2011.02.10
HFS+ 파일을 이미지에서 복구해보자  (2) 2011.02.10
정규표현식 2회  (0) 2010.04.05
쓸만한 무료 웹 스캐너 Skipfish  (0) 2010.04.05
ASP Webshell  (0) 2010.03.18
Posted by 궁상박군
:

Colasoft packet Builder

Networks 2010. 5. 4. 09:14 |

가끔 모의 해킹을 준비하면 아...  패킷의 ip를 변경해서 보내는 과정이 참...  귀찮을 때가 많다.

그래서 모의해킹을 하면 항상 생각하는 것이 아.....  코딩인가...  였는데

역시 아니나 다를까 멋쟁이가 하나 있었으니 바로 Colasoft Packet Builder가 아닌가!

http://www.colasoft.com/packet_builder/  <-- 여기를 참고 하면된다.


사용자 삽입 이미지

'Networks' 카테고리의 다른 글

초간단 wireshark 사용법  (1) 2011.02.10
데이터 전송기술에 따른 전송속도 비교  (0) 2011.01.18
Posted by 도시형닌자
:

정규표현식 2회

Forensics 2010. 4. 5. 17:48 |
    1. 목적

    정규표현식  1회에서는 정규표현식을 사용하는 방법을 소개 하였습니다. 이번 정규표현식 2회에서는 정규표현식을 활용할 있는 프로그램을 소개하며 그에 따른 분석 방법을 확인해 보도록하겠습니다. 1회에서 말씀드렸듯이 정규표현식은 문자열 처리에 뛰어난 능력이 있습니다.  능력에 따른 검색 기법을 하나 소개하겠습니다.


    C:\WINDOWS>dir /t:c >> c:\dir_windows.txt


    C:\WINDOWS>cat c:\dir_windows.txt | egrep "[0-9]{4}\-[0-9]{2}\-[0-9]{2}  .{4} [0

    -9]{2}\:[0-9]{2}    <DIR>"




    1. 조정레벨

    정규표현식을 사용할때는 문법을 정교하게 조정하거나 그렇지 않게 설정할 있습니다.  정교하지 않게 설정할 경우 문법이 간단해지고, 정교하게 설정할 경우 문법은 길고 한눈으로 파악하기 힘들정도로 복잡해 집니다.  정교하지 않게 설정할 경우 원하지 않는 값이 포함될 있는 반면, 정교하게 설정할 경우에는 원하는 값만을 확인 있습니다.

    사용자의 판단에 따라서 세밀하게  레벨을 조정할 있으며 분석의 방법에 따라 때론 정교하게 때론 간단하게 사용할 있습니다.


    위의 그림은 ipconfig text파일로 저장한 것입니다. 여기서 사용되는 IP 확인할 경우 아래와 같이 입력하면 됩니다.


    위의 그림은 단순 문자를 집어넣어서 문자열에 해당하는 값을 찾는 것입니다. 하지만 172 시작하는 IP Address 알고 싶을때는 타이트 하게 들어 있습니다.


    위와 같이 많은 문자열을 넣어서 172 시작하는 IP Address 확인하였습니다. 이제 문자열만이 아닌 정규표현식으로 표현하여 검색을 해보겠습니다.




    정규표현식을 사용하여 172 시작하는 IP 찾았습니다.  하지만 이경우 .{2} .{7} [1,2,7]{3}에서 다른 문자열이 들어가서 보기싫은 문자를 보게 있습니다.

    이렇듯  정규 표현식은 언제나 유동적일 있으면 보안 관리자의 생각대로 줄였다 풀었다 하면서 조정을 있습니다.


    위에서 쓰인 정규표현식을 나열하여 하나씩 풀어보도록 하겠습니다.

    C:\>cat ipconfig.txt | egrep ".{2} .{7}\. \. \. \. \. \. \. \. \. \. \. \. \: [1,2,7]{3}\."

    cat명령어로 text파일을 읽어드린 파이프라인을 이용하여  egrep명령어를 사용하였습니다.  먼저 따옴표(") 공백을 쓰기 위해서 사용하였습니다.

    펄같은 프로그래밍 언어을 사용할 경우 \s \S등을 사용하여  공백 사용을 읽어드릴 있으나 egrep 공백을 읽어들이기 위해서는 따옴표(") 사용하여 처리를 해줘야합니다.

     따옴표(")뒤에 (.) 메타문자로서 임의의 아무 문자 하나를 뜻하며 {숫자} {숫자}앞에 문자를 숫자만큼 반폭한다는 뜻입니다.

    \. 메타문자로 사용되는 (.) 백슬레이쉬(\) 함께 써서 일반 (.) 같이 읽어 들일 있게 사용 되었습니다.  콜론(:) 마찬가지로 백슬레쉬(\) 함께 쓰여서 일반적인 특수문자로 사용되었습니다.

    마지막으로 [1,2,7]같은 경우는 괄호안에 있는 숫자중 하나를 처리하겠다는 것입니다.  [1,2,7]뒤에 {3} 없을 경우, 1 가능하고 2 가능하며 7 가능합니다. 예를 들어서 [1.2.7]{3} 123 가능하며 721 가능하고 217등도 가능하다는 말입니다.


    1. 정규표현식  활용

    활용에서는 수집한 자료에서 원하는 자료를 확인 있는 정규표현식 팁을 알려드리도록 하겠습니다.  수집한 자료는 시스템 정보 메모리 덤프한 내용을  활용하겠습니다.


    1. 시스템과 메모리에서 정보 얻기

    정규표현식으로 얻고자 하는 정보를 진행하기 앞서 시스템 정보와 메모리 이미지를 얻는 방법을 알아 보겠습니다. 시스템 정보는 systeminfo명령어를 사용하며 레지스트리 정보를 얻기 위해서는 Erunt Regripper프로그램을 사용합니다. 마지막으로 메모리 이미지를 얻기 위한 툴들을 설명하겠습니다. 먼저 시스템 정보와 레지스트리를 얻어보겠습니다. 하단을 참조하십시오


    1. 시스템 정보 얻기

    C:\test>systeminfo > systeminfo.txt


    호스트 이름:             DORUMUGS-COM

    OS 이름:                 Microsoft Windows XP Professional

    OS 버전:                 5.1.2600 Service Pack 3 빌드 2600

    OS 제조업체:             Microsoft Corporation

    OS 구성:                 독립 실행형 워크스테이션

    OS 빌드 종류:            Multiprocessor Free

    등록된 소유자:           dorumugs

    등록된 조직:            

    Product ID:              76489-640-7954827-23292

    원래 설치 날짜:          2009-12-21, 오전 9:09:14

    System Up Time:          5일, 17시간, 3분, 23초

    시스템 제조업체:         Gigabyte Technology Co., Ltd.

    시스템 모델:             EP45-UD3R

    시스템 종류:             X86-based PC

    프로세서:                프로세서 1개 설치됨

                             [01]: x86 Family 6 Model 23 Stepping 10 GenuineIntel ~2999Mhz

    BIOS 버전:               GBT    - 42302e31

    Windows 디렉터리:        C:\WINDOWS

    System 디렉터리:         C:\WINDOWS\system32

    부팅 장치:               \Device\HarddiskVolume1

    시스템 로케일:           ko;한국어

    입력 로케일:             ko;한국어

    표준 시간대:             N/A

    총 실제 메모리:          3,326MB

    사용 가능한 실제 메모리: 680MB

    가상 메모리: 최대 크기:  2,048MB

    가상 메모리: 사용 가능:  1,993MB

    가상 메모리: 사용 중:    55MB

    페이지 파일 위치:        C:\pagefile.sys

    도메인:                  WORKGROUP

    로그온 서버:             \\DORUMUGS-COM

    Hotfix:                  Hotfix xxx개 설치됨

                        

    네트워크 카드:           NIC 4개 설치됨

                             [01]: 1394 넷 어댑터

                                   연결 이름: 1394 연결

                                   DHCP 사용: 예

                                   DHCP 서버: N/A

                                   IP 주소

                             [02]: Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ethernet NIC

                                   연결 이름: 로컬 영역 연결

                                   DHCP 사용: 아니오

                                   IP 주소

                                   [01]: xxx.xxx.xxx.xxx

                             [03]: VMware Virtual Ethernet Adapter for VMnet1

                                   연결 이름: VMware Network Adapter VMnet1

                                   DHCP 사용: 아니오

                                   IP 주소

                                   [01]: 192.168.42.1

                             [04]: VMware Virtual Ethernet Adapter for VMnet8

                                   연결 이름: VMware Network Adapter VMnet8

                                   DHCP 사용: 아니오

                                   IP 주소

                                   [01]: 192.168.137.1


    1. 레지스트리 정보

    Erunt.exe프로그램으로 C:\test\경로에 레지스트리  파일들을 덤프합니다. 이후 덤프된 파일에서 rip.exe프로그램(Regripper) 레지스트리에서 유용하게 쓰이는 정보를 파싱하여 가져오게 됩니다.  정보는  "5. 정규표현식으로 정보얻기" 에서 세세하게 대루도록 하겠습니다. 쓰여진 명령어는 아래와 같습니다.

    erunt.exe c:\test\registry\ sysreg curuser otherusers
     /noconfirmdelete / noprogresswindow


    rip.exe -r c:\test\\users\00000001\NTUSER.DAT -f all
    >> c:\test\information.txt

    rip.exe -r c:\test\\users\00000001\NTUSER.DAT -f ntuser
    >> c:\test\information.txt

    rip.exe -r c:\test\\users\00000003\NTUSER.DAT -f all
    >> c:\test\information.txt

    rip.exe -r c:\test\\users\00000003\NTUSER.DAT -f ntuser
    >> c:\test\information.txt

    rip.exe -r c:\test\\users\00000005\NTUSER.DAT -f all
    >> c:\test\information.txt

    rip.exe -r c:\test\\users\00000005\NTUSER.DAT -f ntuser
    >> c:\test\information.txt

    rip.exe -r c:\test\\users\00000007\NTUSER.DAT -f all
    >> c:\test\information.txt

    rip.exe -r c:\test\\users\00000007\NTUSER.DAT -f ntuser
    >> c:\test\information.txt

    rip.exe -r c:\test\\sam -f sam >> c:\test\information.txt

    rip.exe -r c:\test\\security -f security >> c:\test\information.txt

    rip.exe -r c:\test\\system -f system >> c:\test\information.txt

    rip.exe -r c:\test\\software -f softwaret >> c:\test\information.txt


    해당 프로그램을 다운 로드 받을 있는 URL 아래와 같습니다.


    1. 메모리 덤프

    메모리 이미지를 확보하기 위한 Tool들은 Windd dd Fdpro등이 존재합니다. 사용 용도가 비슷하듯이 사용 방법도 전부 비슷합니다. 문서는 Fdpro 기준으로  작성되겠습니다.  사용된 명령어는 아래와 같습니다.


    C:\test\fdpro.exe 100221_memory.dd


    -= FDPro v1.5.0.0146 (c)HBGary, Inc 2008 - 2009 =-


    [+] Detected OS: Microsoft Windows XP Professional Service Pack 3 (build 2600)

    [+] Extracting x86 driver

    [+] Driver extracted successfully

    [+] using driver at E:\Utils\WIN_IR\fastdumpx86.sys

    [+] CreateService success, driver installed

    [+] StartService success, driver started

    [+] Driver installed and running

    [+] Strict Mode: Disabled


    [+] Block Read/Write Size: 0x100000 (1024k)


    [ Full Range = 0x0 - 0xcfee0000 (3326 MB)]

    위와같은 문구가 나오며, 퍼센트로 작업 진행 사항을 확인 있습니다. 100%라는 표시와 함께 완료가 되고  프롬프트로 빠져나오게 됩니다.



    1. 시스템과 메모리에서 찾아 보고자 하는 내용은 아래와 같습니다.

    메모리 이미지를 검색하기 위해 사용된 명령어는 strings입니다. 명령어는 sysinternals에서 제공하고 있으며 cat명령어와 다르게 바이너리를 문자열로 보여주는 기능이 있습니다.   다운로드가 가능한 페이지는 아래와 같습니다.

    ※ Download URL : www.sysinternals.com


    1. IP

    C:\test\2010-02-01_registry_1>strings system | egrep [0-9]{3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} > c:\test\ip.txt


    C:\test\2010-02-01_registry_1>cat c:\test\ip.txt | egrep -v 255 > c:\test\except

    _255.txt

    위에서 사용된 정규표현식은 [0-9]{3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}입니다. 범위는 0에서 부터 9까지로 정했으며 특수기호는 (.)으로 표시되므로 \.으로 표시하였습니다. 여기서 주목할 부분은 egrep명령어의 옵션입니다. 옵션중 -v -v뒤에 나오는 패턴과 반대되는 문자열을 보여줍니다. 일반적으로 사용되는 정규표현식 [^] 같다고 보시면 됩니다.(여러 테스트상 egrep에서는 -v옵션으로 반대의 결과를 얻을 있지만, [^]기능은 동작하지 않았습니다.) 해당 옵션을 사용하여 255 제외한 이유는 네트워크에서 사용되는 255 서브넷으로 사용되는 경우가 많기 때문입니다. 원하지 않는 정보가 존재하면 가독성이 떨어지므로 255 대한 부분을 제외하고 출력을 시도 하였습니다.  위와 같은 명령어의 결과는 아래와 같습니다.




    1. 핸드폰 번호

    C:\test>strings 100221_memory.dd |
    egrep [
    0,1]{2,3}\-[0-9]{3,4}\-[0-9]{3,4}$ > phonenumber.txt

    위에서 사용된 정규표현식은 [0,1]{2,3}\-[0-9]{3,4}\-[0-9]{3,4}$ 입니다. [0-9] 0에서 9까지의 범위를 지정하는 것이며 {2,3} 0에서9까지의 숫자가 2에서 3 반복된다는 뜻입니다.  \-는 -라는 특수기호를 사용하기위해서 \를 붙여 사용한 것입니다.  마지막에 $ [0,1]{2,3}\-[0-9]{3,4}\-[0-9]{3,4}이라는 값과 맞아 떨어졌을때 값을 마지막으로 인식하고 뒤의 값을 표현하지 않는다는 뜻입니다. 결과로 저장한 phonenumber.txt 출력한 화면은 아래와 같습니다.


    위에서 설명한거와 같이 $ 핸드폰 번호를 마지막으로 인식하고 핸드폰 다음의 문자열을 나타내 주지 않습니다.


    1. ID

    C:\test>cat information.txt | egrep -i username > Username.txt

    Information.txt Regripper프로그램(rip.exe) 사용하여 레지스트리의 정보를 가져온 파일입니다.  Regripper 레지스트리에서 쿼리를 진행하여 분석가가 보기에 불편함이 없도록 도움을 줍니다. 결과값으로 출력된 information.txt에서는 사용자를 검색할 있습니다. 위에서 진행한 정규표현식은 단순 문자열이지만 해당하는 문자열의 소문자와 대문자를 무시하고 진행한것입니다. 무시하기 위해서 -i옵션을 사용하였으며 결과 리스트는 아래와 같습니다.



    그림에서 보듯이 계정보는 Username으로 U 대문자입니다. 하지만 -i 대문자와 소문자를 무시하여 결과값을 정확하게 얻을 있었습니다. 이제 해당 문자열을 옵션없이 정규표현식으로만 표현해보도록하겠습니다. (하단 참조)

    C:\test>cat information.txt |
    egrep -i [U,u][S,s][E,e][R,r][N,n][A,a][M,m][E,e]

    Username        : Administrator [500]

    Username        : Guest [501]

    Username        : HelpAssistant [1000]

    Username        : SUPPORT_388945a0 [1002]

    Username        : dorumugs [1003]

    Username        : __vmware_user__ [1007]

    [] 대문자와 소문자를 묶었습니다. 한자 전부 써줘야 되므로 불편함이 있습니다. 그러므로 옵션으로 처리할 있는 부분은 처리하는 것이 시간을 단축하는 방법입니다.


    1. 계좌정보
      외환은행 : XXX-XX-XXXXX-X       신한은행 : XXX-XX-XXXXXX
       
      국민은행 : XXX-XX-XXXX-XXX     조흥은행 : XXX-XX-XXXXXX


SC제일은행 : XXX-XX-XXXXXX     하나은행 : XXX-XXXXXX-XXXXX


 

우리은행 : XXX-XXXXXX-XX-XXX  농협중앙회 : XXX-XX-XXXXXX


 

한미은행 : XXX-XXXXX-XXX         우체국 : XXXXXX-XX-XXXXXX


 

기업은행 : XXX-XXXXXX-XX-XXX

    위의 정보는 은행마다 가지고 있는 계좌번호 정보다 다릅니다. 그러므로 아래에서 보여지는 정규표현식의 결과는 지저분하게 값이 산재해있을

    가능성이 다분히 있습니다. 만약 은행에 대한 정확한 정보가 있을 경우 은행에 관련되어 명령어를 작성해 보는것이 우선입니다.


    C:\test>cat information.txt |
     egrep "[0-9,\-]{3,6}\-[0-9
    ,\-]{2,6}\-[0-9,\-]"

    명령어는 위와 같습니다.

    위의 명령어를 사용하여 나온 결과값은 아래와 같이 확인할 수 있습니다.


     



'Forensics' 카테고리의 다른 글

HFS+ 파일을 이미지에서 복구해보자  (2) 2011.02.10
x-way forensic으로 파일 복구하기  (0) 2010.09.24
쓸만한 무료 웹 스캐너 Skipfish  (0) 2010.04.05
ASP Webshell  (0) 2010.03.18
재미있는 정규표현식 1회  (1) 2010.03.17
Posted by 도시형닌자
:

1.   SKIPFISH

skipfish는 웹 애플리케이션 점검 툴입니다. 자동적으로  웹 애플리케이션을 점검하며 중요 기능은 아래와 같습니다.

a.     빠른 스피드

C코드로 작성되어 http를 핸들링하기에 적합합니다. 또한 CPU 자원을 적게 사용하면서 초단위로 대량의 요청을 처리할 수 있습니다.

 

b.     쉬운 사용법

다양한 빠른 웹 프레임워크를 지원할 수 있으며, 자동 학습기능으로 즉시 Word list를 생성합니다. 생성된 word list를 이용하여 html결과물을 자동으로 생성합니다.

 

c.   최신 보안 로직

고급 로직을 도입하여 오탐율을 줄였습니다. 또한 블라인드 인젝션 벡터 탐지, XSS 그리고 다양한 공격 등을 탐지할 수 있는 기능이 있습니다.

 

skipfish Linux,   FreeBSD 7.0+, MacOS x, 그리고 windows(Cygwin)환경에서 동작합니다

 

 

2.   Download  URL

아래 URL에서 다운로드 받을 수 있습니다.

URL : http://code.google.com/p/skipfish/

 

 

3.   설치

a.     다운로드

wget http://skipfish.googlecode.com/files/skipfish-1.25b.tgz

 

b.     README & README-FIRST

다운로드 받은 파일의 압축을 풀면 README 파일과 README-FIRST파일을 확인 할 수 있습니다. 두 파일에는 설치를 할때 주의해야 하는 내용과 설치 방법이 기술되어 있습니다.

 

·     압축 풀기

tar -xvzf skipfish-1.25b.tgz

 

·     README & README-FIRST  경로 확인

/skipfish/README

/skipfish/dictionaries/README-FIRST

 

 

c.     libidn

README 확인 결과 skipfish 사용하기 위해서는 libidn 라이브러리를 먼저 설치해야한다고 설명되어 있습니다. 

 

·     libidn 다운로드

wget http://ftp.gnu.org/gnu/libidn/libidn-1.18.tar.gz

 

·     libidn 설치

압축을  풀면 /libidn-1.18/폴더가 생성됩니다. 폴더 안에 INSTALL 파일이 존재합니다. INSTALL파일 안에 설치하는 방법이 설명되어 있습니다.

 /libidn-1.18$./configure && make && make install

 

 

d.     skipfish 설치

sectest@ubuntu:/test/skipfish$ sudo make

 

·     설치시 error

http_client.h:26:25: error: openssl/ssl.h: No such file or directory

해결 : sudo apt-get install libace-ssl-dev

 

 

e.     사용법

Usage: ./skipfish [ options ... ] -o output_dir start_url [ start_url2 ... ]

-o 옵션으로 점검 결과를 저장하곳을 지정합니다.

start_url 부분은 점검을 진행할 URL입니다. 

옵션 사용방법은 메뉴얼 페이지를 참조하시면 됩니다. 메뉴얼 페이지를 확인하는 명령어는 ./skipfish -h입니다.

4.   결과

a.     명령어

./skipfish -o /result/ http://192.168.137.50

명령어는 URL 192.168.137.50 대한 애플리케이션 점검을 결과를result폴더에 넣겠다는 의미 입니다.

 

 

b.     동작 화면

아래와 같은 화면을 나타내며, 애플리키에션 점검을 진행합니다.

사용자 삽입 이미지
 

 

c.   종료

[+] Wordlist 'skipfish.wl' updated (563 new words added).

[+] Copying static resources...

[+] Sorting and annotating crawl nodes: 9145

[+] Looking for duplicate entries: 9145

[+] Counting unique issues: 489

[+] Writing scan description...

[+] Counting unique issues: 9145

[+] Generating summary views...

[+] Report saved to '/test/result//index.html' [0xc60becfc].

위와 같이 작업 결과 내용을 담은 텍스트문이 출력되고 종료 됩니다.

 

처음에 지정한 /test/result/폴더에 결과가 저장된것을 확인할 있습니다.

 

d.  결과확인

사용자 삽입 이미지

결과가 index.html 저장됩니다. 해당 사이트의 취약점과 사이트가 담고 있는 파일들의 유형을 보여줍니다.

스캔닝을 진행한 파라미터값과 결과를 show trace 버튼으로 확인이 가능합니다.

 

하단그림 참조

 

사용자 삽입 이미지

위 그림과 같이 REQUEST RESPONSE한 내용을 전부 확인 할 수 있습니다.

'Forensics' 카테고리의 다른 글

x-way forensic으로 파일 복구하기  (0) 2010.09.24
정규표현식 2회  (0) 2010.04.05
ASP Webshell  (0) 2010.03.18
재미있는 정규표현식 1회  (1) 2010.03.17
F-response 설명서  (0) 2009.09.11
Posted by 도시형닌자
:

악성코드 수집

Malware Analysis 2010. 3. 21. 01:21 |

가끔 악성코드가 분석하고 싶을 때(-_-?) 자발적으로 인터넷을 다닐때가 있는데
저 같은 경우는 malwareurl이나 malwaredomainlist 같은 곳에서 찾는 경우가 있습니다.

사용자 삽입 이미지

위의 그림은 malwareulr.com에서 확인할 수 있는 내용으로 domain, ip등에 대한 정보를 갖고 있습니다.
Domain만 가지고는 악성코드의 URL을 파악하는데 문제가 있으므로 맨 우측에 보이는 Details정보를 눌렀을 경우
다음 아래의 그림처럼 자세한 정보 파악이 가능합니다.
사용자 삽입 이미지

Details 정보에서는 위처럼 URL경로외에도 Redirections, VirusTotal, Anubis, ThreatExpert 검사등에 대한 추가적인 정보와, google이나 MalwareDomainList등의 Blacklist정보, Whois정보등을 제공합니다.

또한 맨 하단은 다음과 같이 해당 Domain이나 IP에 대한 과거 신고접수된 내역을 보여줍니다.
사용자 삽입 이미지

(# 위 그림은 62.212.66.91에 대한 과거 신고이력입니다)


하지만 위의 두개의 도메인외에도 악성코드를 유포하는 경로를 가지고 있는 사이트는 하루에도
수백건의 업데이트가 있기 떄문에 어떤걸 받아서 해볼까 고민할 때도 있고
샘플 수집을 위해 모조리 다운받으려 할 경우도 유포 사이트의 수도 많고 업데이트도 빈번히-제가 확인했을 때는 매일이었는데 아닐수도 있으니-일어나기 때문에 언제다 일일이 클릭해서 다운받나 싶더군요

이럴때 쓰라고 하는 건가요? malwareurl.com은 신고접수된 악성코드 유포경로에 대해서 CSV형식으로 Export해서 사용자에게 떨궈주는 기능이 있습니다.
그런데 언제부터인지 모르겠지만 export하는 하이퍼링크를 클릭하면 별도의 과정없이 다운 가능했었는데 다운받기 위해서는 사용자 등록을 해야하고 등록한 메일로 키값을 포함한 URL을 메일로 보내주더군요

여하튼 다음 그림처럼 malwareurl.com의 메인화면에서 Register and Export data를 선택 후 등록하시면 접근 경로를 메일로 보내줍니다.

사용자 삽입 이미지

위에서 등록하시고 조금 기다리시면 다음 그림처럼 메일이 옵니다
사용자 삽입 이미지

해당 경로로 접근하면 CSV파일을 다운로드하게 되며 파일을 열어보시면 다음과 같은 화면을 볼 수 있습니다.
사용자 삽입 이미지

첫번째 열부터 URLs, Ip address, Reverse Lookup, ASN, Brief description, Domain registrant Date입니다.
(재미있는거는 예전에는 맨위의 행에 컬럼명이 같이 나왔는데 언제부터인가 빠져서 그냥 정보만 나오다러구요)

여하튼 저렇게 목록을 다운받게 했으니 이제 자동으로 접근해서 파일을 다운받도록 스크립트를 만들어야겠죠

스크립트에 대한 설명은 따로 설명안드려도 되겠죠? -ㅅ-;
궁금하시면 메일로 주세요 psj020@gmail.com

참고로 아래것을 그대로 쓰시려면 아래의 파일 클릭하시면 됩니다.(물론 키값 부분은 삭제했습니다. 그 부분은 등록하신 후 메일로 오신 부분으로 교체 하시면 됩니다)



위 스크립트는 windows에서 사용하려고 만들었으며, UnxUtils, logparser, perl만 깔려있으면 정상적으로 실행되실꺼에요;
위의 파일은 제가 3월 19일자에 대한 파일만 뽑아낸거구요;
매일매일 돌리고 싶다 하신 분들은 batch파일등으로 어제 날짜 구하는 파일 만들어서 2010-03-19 대신에 입력해주시면 됩니다.
또한 logparser로 쿼리 하는 부분에 위의 그림에서 짤렸지만 LIKE %.exe하는 부분이 있는데 이 부분은 사용하시는 분 입맛대로 descriptiong에서 exploit을 하시든지, FAKE AV를 하시든지 설정하시면 됩니다.

아래는 생성된 파일 및 다운로드 된 파일입니다. 저는 이력관리때문에 csv파일을 여러개 생성하였지만 수집용도로만 쓰려면 별 필요없으니 삭제하는 구문을 추가하시는 것도 ㅎㅎ



아...역시 뻘글인가요? -_-
그냥 가끔 아... 이런게 필요하구나 하신분들한테 도움이 되셨으면 좋겠습니다.

'Malware Analysis' 카테고리의 다른 글

악성코드 분석을 위한 스크립트 만들기!! #1  (1) 2011.01.13
RussKill  (0) 2010.01.06
Posted by 궁상박군
:

ASP Webshell

Forensics 2010. 3. 18. 22:02 |
 

    1. Webshell이란?

    

    Webshell이란 업로드 취약점 등 을 이용하여 내부 시스템에 명령을 수행할 수 있는 코드를 말합니다. 웹이 서버에서 구동되고 있다 하여도 취약점이 존재하지 않으면, 수행되지 않으며 만약 업로드되었다 하더라도 실행 권한이 없으면, 실행이 되지 않습니다. 하지만 취약점과 실행권한이 존재할 때는 서버 내부에 명령을 수행할 수 있으므로 침해 범위가 넓어 질 수 있습니다

     

    ※ shell이란 운영체제 상에서 다양한 운영체제 기능과 서비스를 구현하고 제공하는 프로그램 입니다. 쉘은 일반적으로 CLI(Command Line Interface)와 GUI(Graphical User Interface)가 있습니다. CLI는 손으로 직접 명령어를 쳐서 수행하는 인터페이스를 가리키며 대표적으로 cmd가 있습니다. GUI는 그래픽적으로 사용자의 편의를 많이 도모하는 윈도우 Application을 예로 들 수 있습니다.

     

     

    2. Webshell의 기능

    

    Webshell이 업로드 취약점등을 이용하여 업로드 되었을 시 웹서버가 실행되는 권한과 동일한 명령어를 수행할 수 있습니다. 아래 예제에서 볼 수 있는 Webshell은 가장 간단한 종류 중 한가지로서, 사용자로부터 입력된 시스템 명령어를 쉘에 전달하는 기능을 가지고 있습니다.

     

     

    위 그림은 DOS 내부 명령어인 dir을 입력하여 디렉터리를 출력한 결과입니다. Webshell은 명령어를 직접 입력하여 결과를 얻을 수 있으며 더 나아가서는 DB에 접근하여 DB정보를 획득하거나 Iframe같은 악성 스크립트를 삽입하여 악성코드를 배포와 동시에 감염시키는 용도로 사용될 수 있습니다.  

     

    3. Webshell (dark.asp) 소개

    

    <<dark.asp>>

    Webshell 인터넷 상에서 쉽게 구할 있는 Webshell 가지 입니다. IIS 웹서버에서 실행할 있는 ASP 구현된 Webshell이며, 사용법은 아래와 같습니다.

    http://192.168.137.220:8000/dark.asp?goaction=login [password : tencentisapieceofshit]

     

     

    기능은 하단에서 살펴 보도록 하겠습니다.

     

    ● Serverinfo : 서버의 이름과 IP등 현재 시스템이 사용하고 있는 정보를 나타냅니다

     

    ● Object Info : 서버가 사용하고 있는 웹 컨텐츠를 나타냅니다.

          ex> Wscript.shell, Adodb.stream ETC….

     

    ● User Info : 웹을 관리하고 있는 사용자 정보를 가지고 있습니다. 관리자의 로그인 정보와

                      패스워드 만료 날짜에 대한 정보를 볼 수 있습니다.

     

    ● C-S info : 웹서버상에 설정되어 있는 환경변수 정보 및 Webshell 접속자의 정보를 나타냅니다.
                    (접속자 IP, 접속자 PORT, 접속 브라우져 등)

     

    ● WS Execute : C:\Inetpub\webhack\cmd.exe -c dir 같은 값을 넣어서 명령어를 실행시킵니다.

     

    ● FSO File : 웹서버에 업로드를 하거나 웹서버에 존재하는 파일을 복사 및 수정이 가능합니다.

     

    ● App File : 웹서버에 존재하는 파일들을 수정하거나 다운로드 받을 수 있으며 상태정보를
                     수정할 수 있습니다.

     

    ● Ms DataBase : DataBase에 접근할 수 있으며, SQL명령을 수행할 수 있습니다.

     

    ● File Packeager : 파일을 Packing을 할 수 있으며, Unpacking을 수행 할 수 있습니다. 
                            (Packing의 개념을 모를 경우 그냥 압축이라고 생각하시면 됩니다).

     

    ● File Searcher : 웹 디렉토리에 있는 파일을 검색할 수 있습니다.

     

    ● ServU UP : FTP를 수행하는 포트를 통해서 FTP에 접속하여 FTP기능을 사용할 수 있습니다.

     

    ● Scan Shells : Webshell기능을 수행하고 있는 페이지를 찾아서 보여줍니다.

     

    ● Some others… : 서버에서 파일을 다운로드 받거나 레지스트리 정보를 읽을 수 있습니다. 
                            또한 포트정보를 스캐닝 할 수 있으며 웹서버에 존재하는 다른 Webshell을
                            디코딩 할 수 도 있습니다. 마지막 기능으로는 시스템에서 사용하는 기본 폴더
                            경로를 조사할 수 있습니다. 

     

     

    4. Webshell(dark.asp)를 이용한 Webshell 탐지

     

    Webshell을 이용하여 현재 시스템에 업로드된 Webshell 리스트를 조사해 보았습니다. 조사내역은 아래와 같습니다.

     


    Webshell을 통해서 위와 같은 파일들을 찾았습니다. 찾은 파일 내역을 살펴보면 일반적으로 사용되는 오브젝트와 메소드가 존재한다는 것을 알 수 있습니다. 대체적으로 Wscript.shell이 사용되며 Scripting.FileSystemObject도 많이 사용 됩니다. 먼저 Wscript.shell에 대해서 알아보도록 하겠습니다.

     

    ● Wscript.shell

        ASP Webshell에서 자주 사용되는 오브젝트입니다 Run과 Exec메소드를 사용하여 시스템
        명령어와 외부
    프로그램을 실행 할 수 있습니다. 만약 상위 권한이 있을 때는 좀더 자유롭게
        기능을 사용할 수있습니다
    .


        사용방법은 아래와 같습니다.

     


    Scripting.ileSystemObject

     ASP Webshell은 위의 오브젝트를 사용하여 파일 조작이 가능합니다. 시스템의 권한에 따라서

     파일에 읽기, 쓰기, 변경이 가능합니다.

     


    Webshell이 사용하는 오브젝트와 메소드를 확인한 결과 일반적으로 웹페이지에서 사용하는 종류가 아니라는 것을 알 수 있습니다. 이러한 오브젝트는 시스템에서 정보를 가져오거나 시스템 파일을 실행하는 것으로 이러한 정보를 통하여 Webshell을 탐지 할 수 있습니다. Webshell을 탐지할 수 있는 패턴을 만들어서 Webshell을 차단하기 위해서는 웹방화벽을 이용하거나 IDS, IPS를 이용할 수 있으며, SNORT와 같은 침입 탐지 Application을 사용하여 탐지 및 차단이 가능합니다.

     

    ※ 위와 같은 구문은 공격자 뿐만 아니라 관리자나 사용자도 사용할 수 있는 경우도 있으므로 오탐을 할 수 있는 경우가 생기므로 주의가 필요합니다.

     

    ※ 이 문서는 서버에 설치하여 Webshell을 차단할 수 있는 Application 기준으로 작성됩니다.

     

     

    5. 침임탐지Application을 이용한 Webshell 탐지 방법 - SNORT

     

    SNORT는 오픈 소스로 개발되어 누구나 사용할 수 있는 네트워크 공격 탐지 툴입니다. 이 툴은 IDS기능과 IPS기능으로 사용 할 수 있습니다. 사용 방법은 시그너처탭을 이용하여 공격에 해당하는 문자열을 탐지하여 알리거나 차단 할 수 있습니다. SNORT의 룰을 커스터 마이징 하는 법은 아래와 같습니다. 처음 접하는 사용자들은 어려울 수 있으나 아래 예제를 통해서 알아 보도록 하겠습니다.

     

     ex > alert tcp any any -> any 21 (msg:"Trons_IIS_FTP_EXPLOIT"; content:"|53495445204b53455859|"; offset:0; depth:50;) 

               1    2    3     4   5   6    7    8

     

    표 아래에 빨간색으로 표시되어 있는 부분은 SNORT탐지룰을 작성한 것입니다. 이 룰에서 가장 중요한 부분은 8번 옵션부분입니다.

     

    옵션 부분에 기입되는 탭은 아래와 같습니다.

     

    ● msg

    로그에 저장되거나 alert가 발생될 때 msg로 지정된 텍스트가 사용됩니다.

     

    ● content

    패킷에서 사용되는 문자열을 지정할 수 있습니다. 스트링 값과 바이너리를 지정할 수 있습니다.  

    스트링값은 " " 으로 문자열을 묶어서 지정할 수 있으며, 바이너리일 경우(16진수)에는

    "|바이너리 값|"와 같이 따옴표와 파이프라인으로 묶어서 표현합니다. SNORT에서 가장 많이

    사용되는 옵션이므로 아래의 예제를 참고하시기 바랍니다.


    PAYLOAD는 아래의 그림을 바탕으로 설명하겠습니다.

     

     

    Conetent에 삽입되는 패턴들은 패킷의Data영역에서 가져오게 됩니다. 이 Data영역을 PAYLOAD라고 말하며 바이너리와 아스키코드로 확인 할 수 있습니다.

     

    ※ Data 영역은 위 그림에서 색칠된 부분을 나타냅니다.

     

    ● offset

    content옵션에서 지정한 문자열의 검색을 시작할 위치를 지정합니다.

       만약 offset 0이면 47부터 시작하며 offset 11일 경우에는 2e부터 시작합니다.

       표기법은 『  offset:0』와 같이 표기됩니다.

       ※ 16진수로 b는 11이며, 두 자리 수 숫자 하나는 1byte의 공간을 차지합니다.

     

    ● dsize

      패킷의 PAYLOAD 사이즈를 확인하고 범위를 지정할 수 있습니다. 예를 들어 dsize:200<>300;

      이라고 하면 200바이트에서 300바이트 크기의 패킷을 지정합니다..

     

    ● depth

      PAYLOAD의 depth를 지정하여 패턴 매칭을 실시합니다. depth를 지정함으로서 처리에 대한

      부하는 경감 될 수 있지만, 오탐 확률이 높아질 수 있으므로 주의 하시기 바랍니다.

     

    ● flags

      TCP 프로토콜에 Flag를 다룹니다. 여러 Flag를 나열하고자 할 때는 『Flags:FS;』 식으로 연결지어

      사용합니다. 또한 +( or) *( and) !( not)등의 파라미터도 사용가능합니다.

      TCP flags (-fS/ -fA/ -fR/ -fP/ -fF/ -fU/ -fE/ -fC/ -f-)

     

      Specify the TCP flags:

     

    Protocol

    flags

    내용

    tcp

    -fS

    (SYN)

     

    -fA

    (ACK)

     

    -fR

    (RST)

     

    -fP

    (PSH)

     

    -fF

    (FIN)

     

    -fU

    (URG)

     

    -fE

    (ECE)

     

    -fC

     (CWR)

     

    -f

    NONE

     

    ● nocase

      일반적으로 패턴은 대문자와 소문자를 구별합니다. Nocase를 사용하면 대소문자 구분을

      무시합니다. 따라서 대소문자를 변경하여 들어오는 공격 패턴도 탐지하여 탐지율을 높일 수

      있습니다.

     

     

    6. 패턴 제작 및 Webshell 방어



    Webshell 탐지 방법에서 살펴보았던 위의 표를 기준으로 패턴을 제작하도록 하겠습니다. 패턴은 Wscript.shell을 이용하여 작성하였습니다.

     

    작성된 패턴은 아래와 같습니다.

     

     alert tcp any any -> 192.168.137/24 any (msg:"webshell"; content:"WSCRIPT"; sid:2000;)

     

    tcp프로토콜을 사용하는 모든 아이피와 모든 포트가 192.168.137/24 대역의 모든 포트로 접근하였을 때 content에 나와 있는 패턴(WSCRIPT)를 확인하고 로그에 webshell이라는 msg를 남깁니다. 이 패턴을 수행하기 위하여 아래와 같은 snort명령어를 수행하였습니다.

     

     snort.exe -v -c c:\Snort\rules\webshell.rules -l c:\Snort\log -P 50000

     

    위 명령어는 webshell.rules라는 패턴을 기준으로 c:\Snort\log안에 로그를 생성하는 내용입니다.

     

    SNORT명령어를 수행한 후 Webshell탐지를 수행하고 있는지 확인 하기 위하여 웹서버에 Webshell 업로드를 수행하였습니다.

     

    업로드가 완료되자 alert 되는 것을 확인 있으며, 지정된 로그 안에 alert msg가 생성됩니다. 생성된 msg 아래와 같습니다.


    [**] [1:2000:0] webshell [**]
    [Priority: 0]
    01/29-18:17:23.027943 192.168.137.1:11511 -> 192.168.137.220:8000
    TCP TTL:128 TOS:0x0 ID:45241 IpLen:20 DgmLen:1500 DF
    ***A**** Seq: 0x170F6430 Ack: 0xF65AE3BC Win: 0xFFE6 TcpLen: 20


    SNORT탐지 Rule을 만들기 위해서는 관리자가 탐지하고자 하는 Webshell에 대하여 PAYLOAD를 확인하고 확인된 PAYLOAD안에서 패턴을 조사하여 Rule들을 만들면 됩니다.

    만들어진 Rule들을 만들면 IDS IPS기능을 갖출 있습니다.

     

    SNORT의 패턴은 여려 장비에서도 비슷하게 사용이 되므로 한번 익혀두면 다른 장비에서도 유용하게 사용 할 수 있습니다.

     

    그 외 Webshell 패턴은 아래와 같습니다.

     

    language *= *(vbscript|jscript)\.encode

    *(\$cmd|\$pwd|\$command|\$exec|ps -aux|\$cmdline|\$Mcmd) *

    [^a-zA-Z_>.]eval(\ |\t)*\(.*_POST *\[.*\]

    [^a-zA-Z_>.]exec(\ |\t)*\(

    [^a-zA-Z_>.]proc_open(\ |\t)*\(

    [^a-zA-Z_>.]popen(\ |\t)*\(.*\$.*\)

    [^a-zA-Z_>.]shell_exec(\ |\t)*\(

    [^a-zA-Z_>.]passthru(\ |\t)*\(

    [^a-zA-Z_>.]system(\ |\t)*\(

     

    위의 내용을 바탕으로 Webshell 탐지 패턴을 만들어 적용하더라도 변형된 Webshell 추가적으로 발견될 수도 있습니다. 따라서 새로운 Webshell 확인되었을 때는 Webshell에 따른 패턴을 지속적으로 업데이트 하여 탐지율을 높여야 합니다.

     

     

'Forensics' 카테고리의 다른 글

x-way forensic으로 파일 복구하기  (0) 2010.09.24
정규표현식 2회  (0) 2010.04.05
쓸만한 무료 웹 스캐너 Skipfish  (0) 2010.04.05
재미있는 정규표현식 1회  (1) 2010.03.17
F-response 설명서  (0) 2009.09.11
Posted by 궁상박군
:

1. 정규 표현식이란?

정규 표현식(Regular Expression) 일정한 패턴을 이용하여 패턴에 맞는 텍스트를 찾거나 조작하는 데에 사용되는 문자열을 말합니다.

이번 1 에서는 정규 표현식의 필요성과 메타 문자, 그리고 활용 방안에 대해서 알아보도록 하겠습니다.

정규 표현식이 필요한 이유에 대해 알아 보기 위해 아래 예제를 살펴 보도록 하겠습니다
.

사용자 삽입 이미지


위의 내용을 모두 나열하면
1 Grade Dorumugs Class, 1 Grade Matthew Class, 1 Grade Kayser Class, 2 Grade Dorumugs Class ...... 3Grade Matthew Class, 3 Grade Kayser Class 9개의 문자열로 표현이 가능합니다.

Grade
숫자를, Class 문자열을 포함합니다. 9개의 문자열을 모두 검색하기 위해서 검색 도구에 9개의 문자열을 모두 입력한다면 검색 시간이 매우 많이 걸릴 것이며 경우의 수가 늘어나는 경우 그 시간이 기하급수적으로 증가할 것입니다.

정규 표현식을 이용하여 특정한 패턴을
[숫자] Grade [문자열] Class와 같이 만들 수 있다면 한 줄로 위의 9개의 경우를 모두 표현할 있습니다.

Grade
경우 숫자로만 표시되어 1,2,3,6 포함하고 C,D,K 등의 문자열이 포함될 없습니다. 따라서 검색을 위해서는 문자열이 아닌 숫자로만 표현이 가능하도록 지정해야 할 것입니다.

1 Grade
부터 6 Grade 까지 존재한다고 가정하는 경우 정규 표현식을 이용하여 [1-6] Grade 으로 표현할 있습니다. 여기서 사용되는 특수문자는 메타문자라고 하며 각각의 사용방법과 의미가 존재하며 다음 장에서 살펴 보도록 하겠습니다.

사용자 삽입 이미지


Class
경우 [A-Za-z]+ 등으로 모든 문자열로 표시할 있습니다. 메타문자 ++ 앞의 문자가 1 이상 반복되는 것을 의미합니다. 따라서 [A-Za-z]+ 알파벳 대소문자로 시작하여 것이 1 이상 반복 되어 즉 영문자로 이루어진 단어를 뜻하게 됩니다.

정규표현식은 찾고자 하는 문자열을 문서에서 찾을 때 사용이 많이 됩니다
.

시스템 관리자나 네트워크 관리자는 특정 문자열 검색이나 로그에서 특정 텍스트를 추출해야할 경우에 정규 표현식을 자주 마주치게 됩니다
. 보안 관리자의 경우 디지털 포렌직이나 침해 대응 업무를 할 때 정규 표현식이 많이 사용됩니다.

만 라인이 넘는 특정 파일에서
IP 주소만 찾는 다던가 URL 주소를 추출해야하는 경우하는 경우 정규 표현식 없이는 모든 라인을 모두 검사해야 원하는 결과를 얻을 수 있을 것입니다.


2.  메타문자

메타 문자는 정규 표현식 안에서 특정한 의미를 갖는 특수문자를 말합니다. 메타 문자를 이용하여 반복과 범위 등을 나타낼 있습니다.


주요 메타문자의 활용 방법을 알아보기 위해 아래의 예제를 살펴보도록 하겠습니다
.

사용자 삽입 이미지


아래의 예제는 메타문자
[ . ] 사용방법을 알아보기 위한 예제 입니다. [ . ] 임의의 문자를 나타냅니다.

사용자 삽입 이미지


위 예제에 같이 정규 표현식
A.. A 시작하는 3글자의 문자열을 의미합니다. 메타문자 [ . ] 모든 문자 1개를 나타내기 때문에 모든 문자가 포함될 있습니다. 따라서 A.. A 시작하는 Ahn, Age, Ask등을 나타냅니다.

다음 예제는 반복에 사용되는 메타문자
[ * ], [ + ], [ ? ], [ { } ] 등에 대해서 살펴보도록 하겠습니다.

먼저 메타문자
[ * ] 정규 표현식에서 앞의 문자를 0 이상 반복함을 의미합니다.

사용자 삽입 이미지


Ah*
사용하는 경우 h 0 이상 반복되는 경우를 나타냅니다. 따라서 A, Ah, Ahh, Ahh…. 등을 나타낼 수 있습니다.

메타 문자
[ + ]는 앞의 글자를 1 이상 반복함을 의미합니다.

사용자 삽입 이미지

 

정규표현식 Ah+ Ah, Ahh, Ahhh 포함하지만 h+h 1 이상 반복함을 나타내므로 A는 포함되지 않습니다.

메타문자
[ ? ]는 앞의 문자가 1 또는 0개가 포함되는 경우를 나타냅니다.

사용자 삽입 이미지


정규표현식
Ah?nLab은 따라서 h 있거나 없는 경우를 포함하므로 AnLab AhnLab 포함할 있습니다.

메타문자
{ n }는 앞의 문자열이 n 반복됨을 의미합니다.

사용자 삽입 이미지


{ 2 }
라는 메타문자는 앞의 문자를 두번 반복한다는 의미입니다. 앞의 [ . ] 문자열 하나를 말하기 때문에 문자 2개가 경우를 나타내어 A _ _ Lab 나타낼 있습니다.

메타문자
{ a , b }는 앞의 문자열을 a ~ b 반복함을 의미합니다.

사용자 삽입 이미지


위 그림의 { 2,3 } 메타문자는 앞의 문자값이 2~3 반복 되는 의미입니다. 현재 [ . ] { 2,3 }앞에 있으므로 아무 문자열 2~3개가 들어오는 경우를 나타냅니다.

따라서 이 경우
A _ _ L a b, A _ _ _ L a b 나타내어 AhnLab, AmenLab 포함할 있습니다.

사용자 삽입 이미지

[ ^ ]
메타문자는 ^뒤에 표시된 문자열로 시작함을 의미하니다. 따라서 A 시작하고 h 포함하는 모든 문자열을 포함합니다. 예제에서 AhnLab Ah~ha~ 문자열이 포함됩니다.

메타문자
[ $ ] 는 앞의 문자로 끝나는 것을 의미합니다. 아래 예제와 같이 LAB$로 정규표현식을 사용하는 경우 $B에만 영향을 줍니다. 하지만 B앞에 LA을 포함해야 하므로 결국 LAB 끝나야함을 의미합니다.

사용자 삽입 이미지


따라서
LAB 끝나는 AhnLAB, KimLAB 포함하며 KimBAB 해당되지 않습니다.

다음은 메타문자 자체를 표현할 때 어떻게 표현해야하는지 알아보도록 하겠습니다
. 메타문자 [ . ] 개의 문자열을 나타냅니다. 하지만 . 자체를 표현하기 위해서는 메타문자 [ \ ] 사용하여 \. 으로 표현하면 됩니다.

사용자 삽입 이미지


위의 패턴은 메타문자인
.을 쓰기위한 방법입니다 앞에 \문자를 넣고 메타문자를 넣으면 메타문자를 문자처럼 인식합니다. 다른 메타문자도 마찬가지로 메타문자 자체를 사용하기 위해서는 앞에 [ \ ]를 사용하면 됩니다.

아래
표는 기타 다른 메타문자 조합을 나타냅니다.

사용자 삽입 이미지


위의 표는
Perl에서 쓰이는 메타문자입니다. 사용자들이 주의해야 점은 프로그램마다 메타문자의 형식이 조금씩 달라진다는 것입니다. egrep에서 사용 가능한 메타문자가 perl에서는 사용이 불가능한 경우도 많습니다.

그러므로 메타문자를 사용할 때 해당 프로그램에서 지원하는 지 여부를 확인하고 사용해야 합니다
.


3. 정규표현식 활용


정규표현식은 문자열 처리에 대한 능력이 탁월 합니다
. 그러므로 파일의 내용을 보여주는 프로그램과 같이 사용하는 경우가 굉장히 많습니다. 파일의 내용을 확인 있는 프로그램은 아래와 같습니다.


이름

내용

strings

실행파일이나 오브젝트 파일등을 문자열로 확인

cat

실행파일이나 오브젝트 파일등을 문자열로 확인

type

텍스트 파일의 내용을 확인

grep

문자열을 검색할 수 있는 프로그램

Egrep

문자열을 검색할 수 있는 프로그램


Strings cat 그리고 type 파일을 읽어들어여서 문자열을 확인하는 프로그램이며 grep egrep 같이 연동하여 사용자가 원하는 문자열을 가져올 수 있습니다. Command line창에서 파이프라인( | ) 으로 연동이 가능합니다. 연동화면은 아래와 같습니다.


E:\test>cat dorumugs.txt

dorumugs company


phone : 010-1234-1234


email : dorumugs@ahnlab.com


E:\test>cat dorumugs.txt | egrep email

email : dorumugs@ahnlab.com


위와 같이 dorumugs.txt파일에서 파이프라인을 써서 email 쓰여진 문자열을 정상적으로 뽑아낸 것을 확인 할 수 있습니다. 이제 정규표현식을 써서 문자열 검색하는 것을 직접 확인 해보겠습니다.


호스트 이름:             DORUMUGS-COM

OS 이름:                 Microsoft Windows XP Professional

OS 버전:                 5.1.2600 Service Pack 3 빌드 2600

OS 제조업체:             Microsoft Corporation

OS 구성:                 독립 실행형 워크스테이션

OS 빌드 종류:            Multiprocessor Free

등록된 소유자:           dorumugs

등록된 조직:            

Product ID:              76489-640-7954827-23292

원래 설치 날짜:          2009-12-21, 오전 9:09:14

System Up Time:          1, 2시간, 53, 23

시스템 제조업체:         Gigabyte Technology Co., Ltd.

시스템 모델:             EP45-UD3R

시스템 종류:             X86-based PC

프로세서:                프로세서 1 설치됨

                         [01]: x86 Family 6 Model 23 Stepping 10 GenuineIntel ~2999Mhz

BIOS 버전:               GBT    - 42302e31

Windows 디렉터리:        C:\WINDOWS

System 디렉터리:         C:\WINDOWS\system32

부팅 장치:               \Device\HarddiskVolume1

시스템 로케일:           ko;한국어

입력 로케일:             ko;한국어

표준 시간대:             N/A

총 실제 메모리:          3,326MB

사용 가능한 실제 메모리: 2,250MB

가상 메모리: 최대 크기:  2,048MB

가상 메모리: 사용 가능:  1,992MB

가상 메모리: 사용 :    56MB

페이지 파일 위치:        C:\pagefile.sys

도메인:                  WORKGROUP

로그온 서버:             \\DORUMUGS-COM


네트워크 카드:           NIC 2 설치됨

                         [01]: 1394 어댑터

                               연결 이름: 1394 연결

                               DHCP 사용:

                               DHCP 서버: N/A

                               IP 주소

                        [02]: Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ethernet NIC

                               연결 이름: 로컬 영역 연결

DHCP 사용: 아니오

                               IP 주소

                               [01]: 192.168.137.200


위 파일은 systeminfo를 텍스트로 저장한 문서입니다. 값에서 IP정보만 추출해 보도록 하겠습니다.


E:\test>cat systeminfo.txt | egrep .{1,3}\..{1,3}\..{1,3}\..{1,3}

                               [01]: 192.168.137.200


E:\test>strings systeminfo.txt | egrep .{1,3}\..{1,3}\..{1,3}\..{1,3}

                               [01]: 192.168.137.200


E:\test>type systeminfo.txt | egrep .{1,3}\..{1,3}\..{1,3}\..{1,3}

                               [01]: 192.168.137.200


위 그림은 egrep을 연동하여 systeminfo.txt에서 IP내역만확인 하였습니다. Cat strings type을 전부 사용하여 결과값을 확인 하였습니다. 결과값은 다르지 않지만 각자 사용하는 방법이 조금씩 다르므로 궁금한 사용이 있을 경우 매뉴얼 페이지를 참조하시기 바랍니다.


정규표현식 2회에서는 포렌직에서 활용이되는 접근방법을 소개하도록 하겠습니다. 좀더 분석에 도움이 되는 스크립트를 보여드리며, 분석 진행과정을 단축 시킬 있는 팁을 간단히 소개하도록 하겠습니다.

 

'Forensics' 카테고리의 다른 글

x-way forensic으로 파일 복구하기  (0) 2010.09.24
정규표현식 2회  (0) 2010.04.05
쓸만한 무료 웹 스캐너 Skipfish  (0) 2010.04.05
ASP Webshell  (0) 2010.03.18
F-response 설명서  (0) 2009.09.11
Posted by 도시형닌자
: