정규표현식 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 도시형닌자
: