3/30/2015

[XSS] HTML Event Handler 를 이용한 XSS(Cross Site Script)

XSS 테스트 시 많이 사용하는 방법인 이벤트 핸들러를 사용하는 방법입니다.
주로 < > 에 대한 필터링이 적용되어 있거나 싱글쿼터, 더블쿼터에 대한 필터링이 없을 경우 이벤트 핸들러를 이용하여 XSS 구문 삽입을 시도할 수 있습니다.

예를 들어 아래와 같이  Request에 대해 Response가 도착한다면 이벤트 핸들러를 이용한 공격방법을 구상해볼 수 있습니다.

Request
/test.html?search=test&no=aaa<br>111"11 


Response
<input type="image" value="aaa&lt;br&gt;111"11" src="123.jpg">


Attack Code
/test.html?search=test&no=" onload=alert(45)


onload를 이용하여 해당 구간(이미지)가 정상 로드 되었을 때 값이 실행되며 스크립트가 실행됩니다. 이미지 로드가 실패하는 구간이라면 onerror를 통해서도 가능하며, white list 기반 필터링이 아니라면 시도해 볼 수 있는 이벤트 핸들러는 매우 많습니다. (#1 참조)

테스트를 하다보면 삽입구간에서 hidden type 을 만나게 되는 경우도 많습니다.
< > 가 필터링되지 않는다면 "><script></script> 형태로 구문을 사용하여서 XSS에 성공할 수 있지만 그렇지 않은 경우 이벤트 핸들러로도 제어가 불가능한 부분이 많습니다.

<input value="" type="hidden">

위 같은 경우 hidden 속성으로 인해 사용 불가능한 속성이 다수 존재합니다.
다만 재미있는 경우는 type 속성이 삽입되는 구간보다 뒤에 있다면 type을 변조하여 쉽게 제어가 가능합니다.

Attack Request
/test.html?search=test&no=" type="text" onfocus=alert(45) autofocus test="


Response
<input value="" type="text" onfocus=alert(45) autofocus test="" type="hidden">


Reflected XSS 뿐만 아니라 Stored XSS에서도 이벤트 핸들러를 이용하는 경우도 많이 존재합니다.
새로운 공격 기술이나 취약점은 아니지만 다른 누군가에게는 도움이 될 수 있을거라 생각하여 작성해보았습니다.

짧은 글이지만 재미있게 보셨다면 좋겠네요.
감사합니다 :)



#1 이벤트 핸들러 리스트(OWASP XSS Filter Evasion Cheat Sheet 내 일부)
  1. FSCommand() (attacker can use this when executed from within an embedded Flash object)
  2. onAbort() (when user aborts the loading of an image)
  3. onActivate() (when object is set as the active element)
  4. onAfterPrint() (activates after user prints or previews print job)
  5. onAfterUpdate() (activates on data object after updating data in the source object)
  6. onBeforeActivate() (fires before the object is set as the active element)
  7. onBeforeCopy() (attacker executes the attack string right before a selection is copied to the clipboard - attackers can do this with the execCommand("Copy") function)
  8. onBeforeCut() (attacker executes the attack string right before a selection is cut)
  9. onBeforeDeactivate() (fires right after the activeElement is changed from the current object)
  10. onBeforeEditFocus() (Fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected)
  11. onBeforePaste() (user needs to be tricked into pasting or be forced into it using the execCommand("Paste") function)
  12. onBeforePrint() (user would need to be tricked into printing or attacker could use the print() or execCommand("Print") function).
  13. onBeforeUnload() (user would need to be tricked into closing the browser - attacker cannot unload windows unless it was spawned from the parent)
  14. onBeforeUpdate() (activates on data object before updating data in the source object)
  15. onBegin() (the onbegin event fires immediately when the element's timeline begins)
  16. onBlur() (in the case where another popup is loaded and window looses focus)
  17. onBounce() (fires when the behavior property of the marquee object is set to "alternate" and the contents of the marquee reach one side of the window)
  18. onCellChange() (fires when data changes in the data provider)
  19. onChange() (select, text, or TEXTAREA field loses focus and its value has been modified)
  20. onClick() (someone clicks on a form)
  21. onContextMenu() (user would need to right click on attack area)
  22. onControlSelect() (fires when the user is about to make a control selection of the object)
  23. onCopy() (user needs to copy something or it can be exploited using the execCommand("Copy") command)
  24. onCut() (user needs to copy something or it can be exploited using the execCommand("Cut") command)
  25. onDataAvailable() (user would need to change data in an element, or attacker could perform the same function)
  26. onDataSetChanged() (fires when the data set exposed by a data source object changes)
  27. onDataSetComplete() (fires to indicate that all data is available from the data source object)
  28. onDblClick() (user double-clicks a form element or a link)
  29. onDeactivate() (fires when the activeElement is changed from the current object to another object in the parent document)
  30. onDrag() (requires that the user drags an object)
  31. onDragEnd() (requires that the user drags an object)
  32. onDragLeave() (requires that the user drags an object off a valid location)
  33. onDragEnter() (requires that the user drags an object into a valid location)
  34. onDragOver() (requires that the user drags an object into a valid location)
  35. onDragDrop() (user drops an object (e.g. file) onto the browser window)
  36. onDragStart() (occurs when user starts drag operation)
  37. onDrop() (user drops an object (e.g. file) onto the browser window)
  38. onEnd() (the onEnd event fires when the timeline ends.
  39. onError() (loading of a document or image causes an error)
  40. onErrorUpdate() (fires on a databound object when an error occurs while updating the associated data in the data source object)
  41. onFilterChange() (fires when a visual filter completes state change)
  42. onFinish() (attacker can create the exploit when marquee is finished looping)
  43. onFocus() (attacker executes the attack string when the window gets focus)
  44. onFocusIn() (attacker executes the attack string when window gets focus)
  45. onFocusOut() (attacker executes the attack string when window looses focus)
  46. onHashChange() (fires when the fragment identifier part of the document's current address changed)
  47. onHelp() (attacker executes the attack string when users hits F1 while the window is in focus)
  48. onInput() (the text content of an element is changed through the user interface)
  49. onKeyDown() (user depresses a key)
  50. onKeyPress() (user presses or holds down a key)
  51. onKeyUp() (user releases a key)
  52. onLayoutComplete() (user would have to print or print preview)
  53. onLoad() (attacker executes the attack string after the window loads)
  54. onLoseCapture() (can be exploited by the releaseCapture() method)
  55. onMediaComplete() (When a streaming media file is used, this event could fire before the file starts playing)
  56. onMediaError() (User opens a page in the browser that contains a media file, and the event fires when there is a problem)
  57. onMessage() (fire when the document received a message)
  58. onMouseDown() (the attacker would need to get the user to click on an image)
  59. onMouseEnter() (cursor moves over an object or area)
  60. onMouseLeave() (the attacker would need to get the user to mouse over an image or table and then off again)
  61. onMouseMove() (the attacker would need to get the user to mouse over an image or table)
  62. onMouseOut() (the attacker would need to get the user to mouse over an image or table and then off again)
  63. onMouseOver() (cursor moves over an object or area)
  64. onMouseUp() (the attacker would need to get the user to click on an image)
  65. onMouseWheel() (the attacker would need to get the user to use their mouse wheel)
  66. onMove() (user or attacker would move the page)
  67. onMoveEnd() (user or attacker would move the page)
  68. onMoveStart() (user or attacker would move the page)
  69. onOffline() (occurs if the browser is working in online mode and it starts to work offline)
  70. onOnline() (occurs if the browser is working in offline mode and it starts to work online)
  71. onOutOfSync() (interrupt the element's ability to play its media as defined by the timeline)
  72. onPaste() (user would need to paste or attacker could use the execCommand("Paste") function)
  73. onPause() (the onpause event fires on every element that is active when the timeline pauses, including the body element)
  74. onPopState() (fires when user navigated the session history)
  75. onProgress() (attacker would use this as a flash movie was loading)
  76. onPropertyChange() (user or attacker would need to change an element property)
  77. onReadyStateChange() (user or attacker would need to change an element property)
  78. onRedo() (user went forward in undo transaction history)
  79. onRepeat() (the event fires once for each repetition of the timeline, excluding the first full cycle)
  80. onReset() (user or attacker resets a form)
  81. onResize() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  82. onResizeEnd() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  83. onResizeStart() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  84. onResume() (the onresume event fires on every element that becomes active when the timeline resumes, including the body element)
  85. onReverse() (if the element has a repeatCount greater than one, this event fires every time the timeline begins to play backward)
  86. onRowsEnter() (user or attacker would need to change a row in a data source)
  87. onRowExit() (user or attacker would need to change a row in a data source)
  88. onRowDelete() (user or attacker would need to delete a row in a data source)
  89. onRowInserted() (user or attacker would need to insert a row in a data source)
  90. onScroll() (user would need to scroll, or attacker could use the scrollBy() function)
  91. onSeek() (the onreverse event fires when the timeline is set to play in any direction other than forward)
  92. onSelect() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
  93. onSelectionChange() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
  94. onSelectStart() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
  95. onStart() (fires at the beginning of each marquee loop)
  96. onStop() (user would need to press the stop button or leave the webpage)
  97. onStorage() (storage area changed)
  98. onSyncRestored() (user interrupts the element's ability to play its media as defined by the timeline to fire)
  99. onSubmit() (requires attacker or user submits a form)
  100. onTimeError() (user or attacker sets a time property, such as dur, to an invalid value)
  101. onTrackChange() (user or attacker changes track in a playList)
  102. onUndo() (user went backward in undo transaction history)
  103. onUnload() (as the user clicks any link or presses the back button or attacker forces a click)
  104. onURLFlip() (this event fires when an Advanced Streaming Format (ASF) file, played by a HTML+TIME (Timed Interactive Multimedia Extensions) media tag, processes script commands embedded in the ASF file)
  105. seekSegmentTime() (this is a method that locates the specified point on the element's segment time line and begins playing from that point. The segment consists of one repetition of the time line including reverse play using the AUTOREVERSE attribute.)
(OWASP)


Share: | Coffee Me:

3/27/2015

SARA Vulnerability Scanner - hang on a bit 에러 처리방법

SARA Vulnerability Scanner

SARA 는 Security Auditor's Research Assistant의 약자이며 네트워크 보안 분석 도구입니다.
오래되고 유명한 분석 스캐너지만 가끔 설치 시 에러나 설치 불가 이슈가 존재합니다.

최근에 간만에 재 설치 중 hang on bit 구간에서 정지되어 약간의 편법으로 실행할 수 있도록 설정하였습니다.

빌드 시 아래와 같이 perl5 now... hang on a bit 에서 걸림

# ./configure
# make

Perl needs the csh shell to execute this program
 ->   apt-get install csh


Ok, trying to find perl5 now... hang on a bit...



해당 부분 이전에 sara 실행 파일이 생성되기 때문에 perl 버전을 속여 실행이 가능하다.
# cp /usr/bin/perl5.14.2 /usr/bin/perl5.10.0
# chmod 755 sara

perl 버전 변경 및 권한 설정 후 실행하면 아래와 같이 구동됨을 확인할 수 있다.
(정상 빌드가 아니기 때문에 사용하다가 에러 발생 부분이 있다면 추가 수정이 필요할 수도 있다.)

# ./sara --help

usage: ./sara [options] [tgt tgt tgt ..][tgt/mask_bits][tgt_start-tgt_end]

Enters interactive mode when no target host is specified.

-a attack level (0=light, 1=normal, 2=heavy, 3=extreme,
4=custom0, 5=custom1, 6=custom2 default 2)
-A proximity descent (default 1)
-c list change variables (list format: "name=value; name=value; ...")
-C apply global corrections for Reporter (in rules/correct_report)
-d database data directory (default sara-data)
-e              enable smb password quessing through rules/smbpasswords
-D run in daemon mode
-f Enable firewall analysis (deprecated)
-F file        File of hostnames and/or IPs
-i ignore existing results
-I plugin ignore named plugin (-I all ignores all plugins)
-l proximity maximal proximity level (default 0)
-n perform nmap (hosstype) OS fingerprinting (if nmap is available)
Note:  use of nmap may disrupt some targets.
-O database Specifies the name of the old database which will be correlated with this scan
-o list scan only these (default '')
-p slow performance (packet density) for slow networks/hosts
-P num increase performance by allowing num simultaneous processes
-r supress generation of  SARA Reports (htm, xml, csv)
-R activate timing logic IAW rules/timing
-s option on = enable SAN Top 10/20 reporting; off = disable
-S status_file pathname with scanning status file (default )
-t level timeout (0 = short, 1 = medium, 2 = long, default 1)
-T time start SARA at specified time (time = day-hour:minutes [#]) or
                (time = yy/mm/dd-hour:minutes[#])
-u running from an untrusted host (for rsh/nfs tests)
-U running from a trusted host (for rsh/nfs tests)
-v turn on debugging output
-V print version number
-x list         stay away from these (default '')
-X filename stay away from hosts listed in filename
-z when attack level becomes negative, continue at level 0
-Z stop at attack level 0



Share: | Coffee Me:

3/22/2015

NTFS File System 의 숨겨진 영역 ADS(Alternate Data Stream)

요즘 포렌식, 윈도우즈 시스템에 관심이 생겼습니다.
거의 리눅스만 사용하기 때문에 윈도우즈 시스템의 재미있는 부분에 대해서 많이 모르고 있었더군요. 그 중 오늘은 ADS(Alternate Data Stream) 영역에 관련된 이야기를 할까 합니다.

컴퓨터에서 파일이나 자료를 보관하는 조직 체제를 파일시스템이라고 하는데요.
이 중 많이 쓰이는 파일시스템인 NTFS는 윈도우즈 NT 계열에서 사용되는 파일시스템입니다. 이 NTFS에는 데이터를 숨길 수 있는 ADS 영역이 존재합니다.

ADS는 Alternate Data Stream 이며 다른 데이터 스트림을 생성할 수 있는 것, 대체 데이터 스트림이라고 보시면 됩니다.

FAT32 에서는 제공되지 않았지만 NTFS 부터 ADS가 윈도우에서도 실행될 수 있도록 제공되었습니다. 그 이유는 맥킨토시에서 사용하는 파일시스템과 호환성 유지를 위해 ADS 기능을 제공한 것입니다.

맥킨토시에서는 data 영역과 resource 영역을 분리하여 사용하였고 ADS에서도 유사한 형태로 스트림 데이터를 작성할 수 있도록 구성되었습니다.

NTFS 파일 시스템에서는 ADS 영역에 데이터를 작성하여 은닉할 수 있습니다.
파일을 생성하거나 사용할 때 콜론을 이용하여 쉽게 ADS에 데이터 작성이 가능합니다.

OWASP에서 작성된 ADS에 관한 글을 보면 콜론을 통해 데이터를 숨길 수 있고 공격자가 숨겨진 데이터를 활용할 수 있다고 합니다.

The NTFS file system includes support for alternate data streams. This is not a well known feature and was included, primarily, to provide compatibility with files in the Macintosh file system. Alternate data streams allow files to contain more than one stream of data. Every file has at least one data stream. In Windows, this default data stream is called :$DATA.
Windows Explorer doesn't provide a way of seing what alternate data streams are in a file (or a way to remove them without deleting the file) but they can be created and accessed easily. Because they are difficult to find they are often used by hackers to hide files on machines that they've compromised (perhaps files for a rootkit). Executables in alternate data streams can be executed from the command line but they will not show up in Windows Explorer (or the Console). Reference Example 1 for information on creating and accessing alternate data streams.
Since the :$DATA alternate stream exists for every file it can be an alternate way to access any file. Reference Example 2 for information on accessing the :$DATA alternate data stream in a text file. Any application that creates files or looks at or depends on the end of the file name (or the extension) should be aware of the possibility of these alternate data streams. If unsanitized user input is used to create or reference a file name an attacker could use the :$DATA stream to change the behavior of the software. A well-known vulnerability of this nature existed in older versions of IIS. When IIS saw a request for a file with an ASP extension it sent the ASP file to the application associated with the extension. This application would run the server-side code in the ASP file and generate the HTML response for the request. Due to a flaw in the extension parsing of these versions of IIS, filename.asp::$DATA did not match the extension and since there was no application registered for the asp::$DATA extension, the asp source code was returned to the attacker.
Proper user input sanitation is the best defense against this type of attack.
souce link: https://www.owasp.org/index.php/Windows_::DATA_alternate_data_stream


아래와 같이 README.txt에 codeblack이라는 데이터를 ADS 영역에 숨겨보겠습니다.
README.txt에는 그림과 같이 README File 과 간단한 글이 작성되어 있습니다.


아래와 같이 codeblack 이란 단어를 README.txt 의 codeblack 스트림에 넣습니다.

# echo "codeblack" >> README.txt:codeblack

"codeblack" 이란 문자열은 README.txt 의 codeblack 스트림 영역에 작성되어 있습니다.
README.txt 를 notepad.exe 로 열거나 more 등을 통해 확인하여도 "codeblack"이라는 데이터는 확인되지 않습니다.



ADS영역에 codeblack이라는 데이터를 넣었지만 기존 데이터나, 크기에 대해서는 변화가 없습니다.

자 이제 ADS 영역에 숨겨놓은 데이터를 호출하겠습니다.
codeblack이라는 스트림으로 넣었기 때문에 호출 시 동일하게 불러줘야 합니다.

아래 more 명령으로 확인해보겠습니다.

#more < README.txt:codeblack


위와 같이 숨겨놓은 데이터 확인이 가능합니다.

파일 이외에도 디렉토리 ADS 영역에도 데이터 삽입이 가능하다.
(# echo "test" >> :dirstream)

공격자는 시스템 예약어를 이용하여 탐지 당할 확률을 줄일 수 있습니다.
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 등

또한 ADS 영역에 exe 파일 자체를 밀어 넣어 실행 또한 가능합니다.

C:\> type C:\windows\system32\notepad.exe > c:\windows\system32\calc.exe:notepad.exe
C:\> start c:\windows\system32\calc.exe:notepad.exe (#notepad.exe 실행)



간단하게 ADS 영역에 대해 알아보고 데이터의 삽입/호출에 대해 알아봤습니다.
ADS를 통해 데이터를 은닉하고, Windows 서버에서 데이터를 웹 데이터를 숨기고 가져올 수도 있습니다. 참 재미있는 부분인 것 같습니다. 궁금한점이 있으시면 문의주세요. 
(구글링이 제일 좋습니다..)

감사합니다 :)

Share: | Coffee Me:

3/19/2015

ruby로 간단한 웹 서버 만들기(build simple web server - ruby)



socket 라이브러리 로드 후 TCPServer 를 이용하여 쉽게 생성이 가능하다.
(C랑 다르게 간략하게 코드 구성이 가능하다)

 require 'socket'

 server = TCPServer.open(4040)
 loop {
   client = server.accept
   client.puts(Time.now.ctime)
   client.puts "Hello. codeblack.net :)"
   client.close  #socket close              
 }





Share: | Coffee Me:

3/02/2015

[Cuckoo를 이용한 악성코드 분석] #2 Cuckoo SandBox의 web ui 및 샘플 실행파일 분석(web ui & sample analysis)

악성코드 분석 도구인 cuckoo sandbox를 통한 분석 방법에 대한 두번째 이야기입니다.

사실 가장 귀찮은 부분이 #1인 설치인 것 같습니다..

#2에서는 간단하게, 웹 ui를 사용하는 방법과 sample(그냥 의미없는 파일) 분석 돌린 결과나 볼까 합니다.



1. cuckoo sandbox web ui


cuckoo는 기본적으로 콘솔모드와 웹 UI 둘 다 지원합니다.
콘솔이 편하긴 하지만 개인적으로 분석된 보고서(웹스캐너나, 악성코드 스캔 데이터 등)는 웹이 훨씬 편합니다.

웹 ui 사용은 간단합니다.

cuckoo가 설치된 디렉토리 하단에 util 디렉토리가 있습니다.거기서 web.py를 편집하고 실행하여 웹 ui 구성이 가능합니다.

기본적으로 8080 포트로 지원하지만, 다른 툴에서 사용한다면 변경해서 사용이 필요합니다.
(대다수 툴이 8080을 굉장히 좋아하는 듯 합니다.. 저 또한)

# vim cuckoo/util/web.py

열어보시면 간단한 파이썬 웹 서버 코드입니다.

아래 290번대 줄 보시면 run 함수 부분에 인자값으로 받은 port 데이터를 port에 넣어 실행하는 것 같아 보입니다.

290 if __name__ == "__main__":
291     parser = argparse.ArgumentParser()
292     parser.add_argument("-H", "--host", help="Host to bind the web server on", default="0.0.0.0", action="store", required=False)
293     parser.add_argument("-p", "--port", help="Port to bind the web server on", default=8080, action="store", required=False)
294     args = parser.parse_args()
295
296     run(host=args.host, port=args.port, reloader=True)

인자값에서 포트를 제어해도 되고 아니면 코드상에서 강제로 포트정보 삽입하여 사용하시면 됩니다.

아무튼 cuckoo 가 실행된 후 web.py 를 실행하면 실행 pc에 8080포트로 웹 서버가 올라갑니다.
접근 시 아래와 같이 cuckoo sandbox의 웹 ui 가 나타납니다.

2. 샘플 분석 결과(fiddlerInstaller.exe)




어떤 파일을 올릴까 하다가 pc 안에 있던 fiddler 설치 파일을 올렸습니다.

분석 시작 후 vm이 호출되면서 실행되는 과정이 나타나네요.



cuckoo 를 실행한 터미널에서도 여러 로그가 나타나며 분석이 완료 됬다는 메시지가 발생합니다.



웹 ui  에서 클릭하여 리포트 결과를 확인했습니다.




인트톨 파일이여서 굉장히 데이터가 컸습니다.
(특히 스크린샷)

 이번 섹션은 #1에서 진행 후 남은 데이터를 쓰기 위한 결과물 같네요.
#3에서는 실제 악성코드 샘플 및 간단하게 샘플하나 만들어서 확인해보고 포스팅하겠습니다.

감사합니다.


#1 Cuckoo SandBox 설치하기 (Install Cuckoo SandBox on debian linux)
http://www.hahwul.com/2015/03/cuckoo-1-cuckoo-sandbox-install-cuckoo.html

#2 Cuckoo SandBox의 web ui 및 샘플 실행파일 분석(web ui & sample analysis)
http://www.codeblack.net/2015/03/cuckoo-2-cuckoo-sandbox-web-ui-web-ui.html





Share: | Coffee Me:

[Cuckoo를 이용한 악성코드 분석] #1 Cuckoo SandBox 설치하기 (Install Cuckoo SandBox on debian linux)

악성코드 분석 도구인 cuckoo sandbox를 통한 분석 방법에 대한 첫번째 이야기입니다.
cuckoo sandbox 설치인데요, 리눅스에서 쉽게 설치가 가능합니다.

일단 하나하나 살펴보며 설치 과정을 작성할까 하다가 양이 많을 것 같아 빠르고 쉽게 설치하는 구성으로 진행해볼까 합니다.


1. cuckoo sandbox 에서 사용하는 패키지 및 lib 설치


(install package and library)

 설치 중 필요했던 패키지, 라이브러리 등을 모아서 하나의 명령행으로 작성하였습니다.

# apt-get install python python-dev python-sqlalchemy python-dpkt python-jinja2
python-magic python-pymongo python-bottle subversion git build-essential git libpcre3 libpcre3-dev libpcre++-dev python-bottle

cuckoo 설정 및 db 종류에 따라 추가로 발생할 수 있는 패키지가 존재합니다. 일단 위 패키지는 구동에 필요했던 패키지들입니다.


데비안 계열 리눅스(데비안,우분투 등)에서는 apt 패키지 매니저로 설치 가능한 부분이 많이 때문에 해당 부분 설치 후 모자란 부분에 대해서 설치를 진행하면 됩니다. (yum으로도 가능하겠지만.. 데비안 유저라 잘 모르겠네요..)

위 설치 과정이 끝났다면 3가지 패키지 설치가 더 필요합니다.
바로 PE-File , ssdeep, yara 인데요. 아래와 같은 방법으로 설치 진행하시면 됩니다.

PE-File
# python-pefile
# svn checkout http://pefile.googlecode.com/svn/trunk/ pefile
# cd  pefile
# python setup.py builid install

ssdeep
ssdeep 는 ssdeep 및 pydeep  설치가 필요합니다.
# wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.9/ssdeep-2.9.tar.gz
# tar -xvf ssdeep-2.9.tar.gz
# cd ssdeep-2.9
# ./configure
# make;make install
# ldconfig
# cd ..
# git clone https://github.com/kbandla/pydeep.git pydeep
# python setup.py build
# python setup.py install
# cd ..

yara
yara 또한 python-yara 설치가 필요합니다.
# wget http://yara-project.googlecode.com/files/yara-1.6.tar.gz
# tar xvfz yara-1.6.tar.gz
# cd yara-1.6
# ./configure
# make;make install
# wget http://yara-project.googlecode.com/files/yara-python-1.6.tar.gz
# tar -xvf yara-python-1.6.tar.gz
# cd yara-python-1.6
# python setup.py build
# python setup.py install
# cd..
# cd yara-1.6
# make install
# cd ..


2.cuckoo sandbox 설치

위 패키지 설치가 끝났다면 cuckoo sandbox 를 다운 받아 설치합니다.
git로 clone 뜨면 됩니다.

# git clone https://github.com/cuckoobox/cuckoo.git cuckoo
#cd cuckoo


3.virtual box 설치

cuckoo sandbox는 oracle vm을 사용하기 때문에 virtual box 설치 및 네트워크 설정이 필요합니다.

여러 웹 사이트 및 블로그를 보면 어렵게 설치하는 방법도 많은데.. 저는 예전에 설치한 방법으로 별다른 에러 없이 잘 진행되었네요.

virtualbox 를 source list 에 추가 후 설치합니다.
# apt-get install virtualbox

virtualbox 설치 과정은 아래 주소 참고해주세요.
(몇몇 필요한 게시글은 좀 옮겨놓아야 할  같네요.)

http://noon.tistory.com/1202

4. vm 설정(set vm)

sandbox 로 쓰일 vm을 생성합니다. 이때 가상머신의 이름은 cuckoo에서 사용되니 꼭 메모해두세요.(쉽게 쓰는게 최고입니다. )


vm 생성이 완료되었다면 터미널에서 가상머신을 위한 host-only 인터페이스를 구성합니다.
vboxmanage를 이용하여 192.168.56 대역으로 설정하였습니다.

# vboxmanage hostonlyif create
# vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1


설정 후 ifconfig로 네트워크 정보 확인 시 확인됩니다.
이제 sandbox 로 쓰일 가상 머신에서 동일한 대역으로 할당 받도록 네트워크 설정을 합니다.


set virtual machine network



추가로 python 과 pil을 설치합니다.

파이썬 공식 홈페이지에서 2.7 버전을 다운로드하여 설치합니다.
www.python.org

download python 2.7
 
pil은 아래 url로 접근하여 2.7 윈도우 버전으로 설치합니다.
http://pythonware.com/products/pil


5. cuckoo agent 설치 및 스냅샷

이제 cuckoo 디렉토리에서 agent.py 파일을 vm으로 넘겨주어 vm 내에서 실행합니다.
실행 후 스냅샷 이름은 test로 하였습니다.


running agent.py


6. cuckoo vm 설정 후 실행

conf 하위의 virtualbox.conf 파일을 아까 만든 vm 데이터로 수정합니다.

#conf/virtualbox.con

  1 [virtualbox]
  2 # Specify which VirtualBox mode you want to run your machines on.
  3 # Can be "gui", "sdl" or "headless". Refer to VirtualBox's official
  4 # documentation to understand the differences.
  5 mode = gui
  6 
  7 # Path to the local installation of the VBoxManage utility.
  8 path = /usr/bin/VBoxManage
  9 
 10 # Specify a comma-separated list of available machines to be used. For each
 11 # specified ID you have to define a dedicated section containing the details
 12 # on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)
 13 machines = cuckoo1          # 1번째 분석 머신입니다. 똑같이 작성하셔도 됩니다.
 14 
 15 [cuckoo1]
 16 # Specify the label name of the current machine as specified in your
 17 # VirtualBox configuration.
 18 label = MalwareAnalysis     #제가 생성한 가상머신 이름입니다.  만드신 vm 넣어줍니다
 19 
 20 # Specify the operating system platform used by current machine
 21 # [windows/darwin/linux].
 22 platform = windows
 23 
 24 # Specify the IP address of the current virtual machine. Make sure that the
 25 # IP address is valid and that the host machine is able to reach it. If not,
 26 # the analysis will fail.
 27 ip = 192.168.56.141         # 가상머신 IP입니다.
 28 
 29 # (Optional) Specify the snapshot name to use. If you do not specify a snapshot
 30 # name, the VirtualBox MachineManager will use the current snapshot.
 31 # Example (Snapshot1 is the snapshot name):
 32 snapshot = test                   # 스냅샷
 33 
 34 # (Optional) Specify the name of the network interface that should be used
 35 # when dumping network traffic from this machine with tcpdump. If specified,
 36 # overrides the default interface specified in cuckoo.conf
 37 # Example (vboxnet0 is the interface name):
 38 interface = vboxnet0        # 네트워크 인터페이스입니다.

시그니쳐 업데이트(선택)
cuckoo에서 쓰이는 분석 모듈 중 업데이트가 필요한 항목에 대한 업데이트입니다.
필수는 아니지만 해서 저는 업데이트 하고 사용하였습니다.

# ./util/community.py -s -f


이제 cuckoo sandbox 실행입니다.

python cuckoo.py 

or

python cuckoo.py -d




   

혹시 vm을 찾을 수 없는 에러 발생 시 아래와 같은 방법으로 해결 가능합니다.
Error
[modules.machinery.virtualbox] DEBUG: VBoxManage returns error checking status for machine MalwareAnalysis: VBoxManage: error: Could not find a registered machine named 'MalwareAnalysis'

MalwareAnalysis(제 vm 입니다.) 를 찾을 수 없다고 하네요.
원인은 제가 작업을 root로 하였는데, vm이 일반 사용자 계정으로 설치되어 vm에서 해당 리스트가 확인이 안되었더라구요..

# vboxmanage list vms

no result(아무 결과 없었습니다.)

하여 root 계정으로 virtualbox 실행 후 MalwareAnalysis.vdi를 로드하여 에러 발생 부분 수정하였습니다. 유사한 방법으로 고치시면 될 거 같습니다.


긴 글 읽어주셔서 정말 감사합니다.
위에서 보신 웹 ui 사용하는 방법 및 샘플로 분석한 결과는 #2에서 보여드리겠습니다.
궁금하신 내용은 답글 및 메일로 주세요.

감사합니다.  :)


#1 Cuckoo SandBox 설치하기 (Install Cuckoo SandBox on debian linux)
http://www.hahwul.com/2015/03/cuckoo-1-cuckoo-sandbox-install-cuckoo.html

#2 Cuckoo SandBox의 web ui 및 샘플 실행파일 분석(web ui & sample analysis)
http://www.hahwul.com/2015/03/cuckoo-2-cuckoo-sandbox-web-ui-web-ui.html




Share: | Coffee Me: