악성코드 수집

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 도시형닌자
: