Не важно, как медленно ты продвигаешься, главное, что ты не останавливаешься.


Saturday 22 June 2019

File Fuzzing menggunakan Peach



Percobaan kali ini adalah file fuzzing menggunakan peach, merupakan fuzzer yang dapat melakukan file fuzzing maupun network fuzzing. Untuk lebih lengkapnya, dapat disimak pada website resmi peach.

Instalasi Peach pada Windows

Proses instalasi peach fuzzer ini cukup mudah, hanya memerlukan Microsoft .NET 4 Runtime dan Windows debugging tools (windbg) yang dapat didownload pada website resmi Microsoft.


Selain di sistem operasi Windows, Peach juga berjalan pada OS X dan Linux. Untuk percobaan kali ini, sistem operasi yang digunakan adalah Windows. Setelah tools diatas terpasang, download peach pada link ini.

Peach Pit

Peach pit merupakan sebutan untuk file konfigurasi Peach berupa XML, file ini dibutuhkan saat menjalankan Peach. File konfigurasi terbagi menjadi beberapa bagian:

  • Data Model, merupakan konfigurasi file yang akan dibentuk oleh peach, file ini akan digunakan pada proses fuzzing terjadi.
  • State Model, merupakan alur dari proses yang akan dijalankan oleh peach, misalnya langkah pertama peach akan membuat file dari data model yang dibuat, kemudian menutup file, dan langkah terakhir menjalankan file tersebut sebagai input pada proses fuzzing.
  • Agents, pada saat proses fuzzing berlangsung, Peach menjalankan sebuah agent, baik secara local maupun remote. Pada bagian ini, agent akan berjalan sesuai dengan konfigurasi ini. Agent inilah yang akan melakukan monitoring terhadap perilaku pada saat fuzzing berlangsung.
  • Test Block, merupakan konfigurasi yang berisi data model, state model, dan agent yang telah dikonfigurasi sebelumnya.
Sebagai contoh, pada percobaan kali ini saya menggunakan vuplayer pada windows 7.  File yang akan digenerate oleh peach berupa file .m3u, untuk konfigurasi lengkapnya, dapat dilihat dibawah ini.
<?xml version="1.0" encoding="utf-8"?>
<Peach xmlns="http://peachfuzzer.com/2012/Peach" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://peachfuzzer.com/2012/Peach ../peach.xsd">
 
 <!-- Define our file format DDL -->
 <DataModel name="dumbm3u">
  <String name="header1" value="M3U\n" mutable="false"/>
  <String name="header2" value="#EXTM3U\n" mutable="false"/>
  <String name="header3" value="#EXTINF:123, Sample - title\n" mutable="false"/>
  <String name="header4" value="C:\" mutable="false"/>
  <String name="mutated" value="hello" mutable="true"/>
 </DataModel>
 
 <!-- Define a simple state machine that will write the file and 
  then launch a program using the FileWriterLauncher publisher -->
 <StateModel name="State" initialState="Initial">
  <State name="Initial">

   <!-- Write out contents of file -->
   <Action type="output">
    <DataModel ref="dumbm3u" />
   </Action>
   
   <!-- Close file -->
   <Action type="close" />
   
   <!-- Launch the file consumer -->
   <Action type="call" method="launchProgram" publisher="Peach.Agent"/>
  </State>
 </StateModel>
 
 <!-- Setup a local agent that will monitor for faults -->
 <Agent name="WinAgent">
  <Monitor class="WindowsDebugger">
   
   <!-- The command line to run.  Notice the filename provided matched up 
    to what is provided below in the Publisher configuration -->
   <Param name="CommandLine" value="C:\Program Files\VUPlayer\VUPlayer.exe fuzzedfile.m3u" />
   <Param name="WinDbgPath" value="C:\Program Files\Windows Kits\10\Debuggers\x86"/>
   <!-- This parameter will cause the debugger to wait for an action-call in
    the state model with a method="notepad.exe" before running
    program.  -->
   <Param name="StartOnCall" value="launchProgram" />
  </Monitor>
  
  <!-- Enable heap debugging on our process as well. -->
  <Monitor class="PageHeap">
   <Param name="Executable" value="VUPlayer.exe"/>
   <Param name="WinDbgPath" value="C:\Program Files\Windows Kits\10\Debuggers\x86"/>
  </Monitor>
 </Agent>
 
 <Test name="Default">
  <Agent ref="WinAgent" platform="windows"/>
  
  <StateModel ref="State"/>
  
  <!-- Configure our publisher with correct filename to write too -->
  <Publisher class="File">
   <Param name="FileName" value="fuzzedfile.m3u" />
  </Publisher>

  <Strategy class="Random"/>

  <Logger class="Filesystem">
   <Param name="Path" value="Logsx" />
  </Logger>
 </Test>

</Peach>
<!-- end -->

File diatas merupakan template yang berada pada folder peach\sample dengan sedikit penyesuaian. Pada bagian ini saya akan menjelaskan file konfigurasi yang telah dibuat.

Data Model
<DataModel name="dumbm3u">
  <String name="header1" value="M3U\n" mutable="false"/>
  <String name="header2" value="#EXTM3U\n" mutable="false"/>
  <String name="header3" value="#EXTINF:123, Sample - title\n" mutable="false"/>
  <String name="header4" value="C:\" mutable="false"/>
  <String name="mutated" value="hello" mutable="true"/>
</DataModel>
Pada bagian ini, user menentukan bentuk file yang akan digenerate. Untuk kasus ini data model diberi nama dumbm3u, nama ini bisa diganti sesuai dengan keinginan user. Pembentukan file m3u dapat merujuk kepada https://en.wikipedia.org/wiki/M3U, maka file yang akan dibentuk berisi header kemudian lokasi file. Karena header bersifat statik, maka pada opsi mutable bernilai false. Pada kondisi mutable bernilai true, Peach akan memutasi string sesuai dengan algoritma yang disediakan.

State Model
<StateModel name="State" initialState="Initial">
  <State name="Initial">
   <!-- Write out contents of file -->
   <Action type="output">
    <DataModel ref="dumbm3u" />
   </Action>
   <!-- Close file -->
   <Action type="close" />
   <!-- Launch the file consumer -->
   <Action type="call" method="launchProgram" publisher="Peach.Agent"/>
  </State>
</StateModel>
Alur dari program ketika fuzzing berjalan, dikonfigurasi pada bagian state model. Pada kasus ini, alur yang akan dijalani yaitu, 
  • Generate file dengan data model dumbm3u.
  • Menutup file.
  • Mengirim file ke peach agent untuk kemudian dieksekusi sesuai dengan konfigurasi pada bagian agent.
Agent
<Agent name="WinAgent">
  <Monitor class="WindowsDebugger">
   
   <!-- The command line to run.  Notice the filename provided matched up 
    to what is provided below in the Publisher configuration -->
   <Param name="CommandLine" value="C:\Program Files\VUPlayer\VUPlayer.exe fuzzedfile.m3u" />
   <Param name="WinDbgPath" value="C:\Program Files\Windows Kits\10\Debuggers\x86"/>
   <!-- This parameter will cause the debugger to wait for an action-call in
    the state model with a method="notepad.exe" before running
    program.  -->
   <Param name="StartOnCall" value="launchProgram" />
  </Monitor>
  
  <!-- Enable heap debugging on our process as well. -->
  <Monitor class="PageHeap">
   <Param name="Executable" value="VUPlayer.exe"/>
   <Param name="WinDbgPath" value="C:\Program Files\Windows Kits\10\Debuggers\x86"/>
  </Monitor>
 </Agent>
Bagian ini berisi konfigurasi peach agent berupa kelas-kelas monitor, agent inilah yang akan melaporkan perilaku yang terjadi pada saat proses fuzzing berlangsung. Perhatikan pada bagian WindowsDebugger, karena pada saat proses fuzzing menggunakan windbg sebagai debuggernya, command apa dan windbg path harus disertakan, parameter WinDbgPath bersifat opsional, apabila direktori instalasi windbg berbeda dengan lokasi default, maka parameter ini harus disertakan.

Test
<Test name="Default">
  <Agent ref="WinAgent" platform="windows"/>
  <StateModel ref="State"/>
  
  <!-- Configure our publisher with correct filename to write too -->
  <Publisher class="File">
   <Param name="FileName" value="fuzzedfile.m3u" />
  </Publisher>

  <Strategy class="Random"/>
  <Logger class="Filesystem">
   <Param name="Path" value="Logsx" />
  </Logger>
</Test>
Pada bagian ini, konfigurasi yang sudah di-set akan diterapkan mulai dari agent dan state model. Ada beberapa block baru yang memiliki peranan masing-masing. 
  • Publisher berperan sebagai input/output pada saat fuzzing berlangsung, merujuk pada web resminya ada beberapa publisher yang bisa digunakan, sepert HTTP, console, file, dst. Pada kasus ini kita akan menggunakan file. 
  • Strategy, merupakan metode yang digunakan pada saat fuzzing data model yang memiliki nilai mutable = true, bisa diisi dengan Squential, Random, ataupun RandomDeterministic. 
  • Logger, merupakan lokasi yang digunakan untuk mencatat event yang terjadi pada saat fuzzing, baik berupa waktu pengerjaan maupun crash pada saat fuzzing berlangsung. 

Running

Setelah konfigurasi selesai dilakukan, saatnya menjalankan peach. Jangan lupa run sebagai administrator.
> Peach.exe [file konfigurasi]
Untuk output yang lebih lengkap, dapat menggunakan opsi debug.
> Peach.exe --debug [file konfigurasi]

Jika berhasil, Peach akan berjalan seperti gambar dibawan ini.
 

Log

Log yang akan disimpan pada path yang telah ditentukan, terdapat 2 folder dan file status.txt. File status.txt berisi event yang terjadi pada saat proses fuzzing berlangsung dan juga mencatat waktu pada saat crash terjadi. 
Sementara folder Faults berisi file hasil debug mengunakan windbg yang menurut modul !exploitable pada windbg dapat diexploit. Berisi stacktrace dan payload yang digunakan pada saat crash terjadi.


Penutup  

Sekian artikel ini saya buat, pada percobaan kali ini hanya berlangsung instalasi peach dan menjalankan peach dengan vuplayer sebagai contoh kasusnya, untuk reproduksi crash menjadi exploit mungkin dapat dilanjutkan pada artikel selanjutnya.

Referensi:
5 λ .: File Fuzzing menggunakan Peach Percobaan kali ini adalah file fuzzing menggunakan peach , merupakan fuzzer yang dapat melakukan file fuzzing maupun network fuzzing. Unt...

No comments:

Post a Comment

< >