Anda di halaman 1dari 25

PROGRAM STUDI SARJANA SISTEM INFORMASI

PROPOSAL PENELITIAN TUGAS AKHIR 1 DAN SEMINAR

Binary Obfuscator Development for Government Surveillance

PENGUSUL

12S15007 – Naomi Nainggolan

12S15014 – Sarah R. Tambunan

12S15052 – Ariansyah Nugroho

INSTITUT TEKNOLOGI DEL

SEPTEMBER 2018
DAFTAR ISI

DAFTAR ISI............................................................................................................................. 2
DAFTAR GAMBAR ................................................................................................................ 3
RINGKASAN ........................................................................................................................... 4
BAB 1. PENDAHULUAN ...................................................................................................... 5
1.1 Latar Belakang .......................................................................................................... 5
1.2 Rumusan Masalah ..................................................................................................... 6
1.3 Tujuan Penelitian ...................................................................................................... 6
1.4 Ruang Lingkup dan Batasan ....................................................................................... 6
1.5 Arsitektur Sistem yang Dibangun ................................................................................ 7
BAB 2. LANDASAN TEORI ................................................................................................. 8
2.1 Obfuskasi ................................................................................................................. 8
2.2 Packer .................................................................................................................... 12
2.3 Portable Executable File Format ................................................................................ 17
2.4 Windows Dynamic Link Library (DLL) ..................................................................... 19
2.5 Dynamic Link Library (DLL) Injection ...................................................................... 21
BAB 3. METODE DAN JADWAL PENELITIAN........................................................... 23
3.1 Metode Penelitian.................................................................................................... 23
3.2 Jadwal Penelitian..................................................................................................... 24

2
DAFTAR GAMBAR

Gambar 1. Arsitektur sistem yang akan dibangun ........................................................................ 7


Gambar 2. Code production .................................................................................................... 17
Gambar 3. Struktur PE file format ........................................................................................... 18
Gambar 4. Virtual memory file PE ........................................................................................... 19
Gambar 5. Tampilan PEView.................................................................................................. 19
Gambar 6. Contoh program Load Time Dynamic linking ........................................................... 21
Gambar 7. Contoh program run time dynamic linking ................................................................ 21
Gambar 8. Cara kerja DLL Injection ........................................................................................ 22
Gambar 9. Metodologi Penelitian ............................................................................................ 23
Gambar 10. Jadwal Penelitian ................................................................................................. 24

3
RINGKASAN

Obfuskasi adalah teknik untuk mentransformasi kode program ke dalam bentuk yang berbeda
tetapi maknanya tetap sama. Obfuskasi penting untuk dilakukan karena beberapa alasan,
diantaranya meningkatkan keamanan code, mencegah gangguan dan melindungi hak cipta.
Ada beberapa metode yang dapat digunakan untuk melakukan obfuskasi. Diantaranya adalah
metode polymorphism, metamorphism, dan packing. Metode Polymorphism adalah metode
obfuskasi yang mendekripsi loop menggunakan beberapa transformasi, seperti menambahkan nop
(instruksi computer yang tidak melakukan apa-apa), code transposition (merubah urutan instruksi dan
menempatkan instruksi jump untuk mempertahankan semantik aslinya) dan register reassignment
(mengubah susunan alokasi register). Metode metamorphism adalah metode obfuskasi yang
mengubah kode dengan berbagai cara, seperti code transposition, mengganti urutan instruksi
yang sejenis, merubah conditional jumps, dan register reassignment (mengubah susunan
alokasi register). Metode packing adalah metode obfuskasi yang mengubah sebuah
executable ke dalam executable lain dengan menunjukkan fungsi yang sama namun jejak
(footprint) yang berbeda pada file system dimana dia berada. Metode packing adalah metode
obfuskasi yang menyembunyikan code sebenarnya dengan menggunakan satu atau lebih
layer compression (enkripsi).
Penelitian ini bertujuan untuk membangun sistem obfuscator untuk kode biner dengan
menggunakan metode packing. Kode biner yang dimaksud berasal dari file executable.
Obfuscator yang akan dibangun bersifat open source untuk mentransformasi sintaks code.
Tantangannya adalah bagaimana merancang sebuah algoritma untuk melakukan packing,
apakah sebuah file executable yang telah diobfuskasi telah memenuhi potency, resilience, dan
cost dengan menguji file executable yang telah diobfusksi terhadap beberapa antivirus.

Kata kunci:

Obfuscation, file executable, packing.

4
BAB 1. PENDAHULUAN

Bab ini berisi uraian latar belakang, tujuan penelitian, ruang lingkup dan arsitektur sistem
yang akan dibangun.

1.1 Latar Belakang

Pada tahun 2015, 80% perusahaan mengindikasikan bahwa sistem mereka berhasil di hack,
diubah, maupun dipublikasikan [1]. Penyerangan tersebut terjadi karena code dari sistem
yang dimiliki cukup readable. Banyaknya aplikasi yang dapat di-install langsung tanpa
menggunakan file .dll juga menjadi salah satu penyebab masalah seperti pembajakan,
software yang dimodifikasi, dan penyalahgunaan code.

Dengan tingkat kejahatan yang makin tinggi, tantangan untuk mencegahnya juga semakin
sulit, terutama kejahatan terorisme global/finansial. Salah satu cara untuk mengatasinya
adalah dengan menggunakan metode surveillance dalam lingkup terbatas dan
bertanggungjawab. Surveillance adalah kegiatan penting yang dilakukan oleh suatu lembaga,
dalam hal ini adalah pemerintah, untuk mengawasi/mengendalikan program yang ada dan
mendeteksi adanya hal-hal yang dianggap tidak sesuai [2]. Surveillance dilakukan dengan
cara mengembangkan software untuk membantu pemantauan. Dengan konteks inilah
diperlukan obfuskasi sehingga modus untuk melakukan surveillance tidak terlihat secara
umum.

Obfuscation atau obfuskasi adalah salah satu teknik untuk merubah struktur source code agar
sulit dipahami tanpa mengubah semantik dari source code tersebut [3]. Obfuscation
dilakukan dengan mentransformasi sintaks code namun tetap memelihara semantik (isi)
sehingga kerahasiaan tetap terjaga [4]. Obfuskasi penting untuk dilakukan karena beberapa
alasan, diantaranya meningkatkan keamanan code, mencegah gangguan dan melindungi hak
intelektual [5].

Metode obfukasi yang sering digunakan saat ini adalah metode packing, polymorphism dan
metamorphism. Packing adalah metode obfuskasi yang menyembunyikan code sebenarnya
dengan menggunakan satu atau lebih layer compression (enkripsi). Polymorphism adalah
metode obfuskasi yang mendeskripsikan loop menggunakan beberapa transformasi, seperti
menambahkan nop code, code transposition (mengubah ututan instruksi dan menempatkan
instruksi jump untuk mempertahankan semantic aslinya), dan register reassignment

5
(mengubah susunan alokasi register). Metamorphim adalah metode obfuskasi yang
memampukan malware melakukan duplikasi terhadap dirinya sendiri. Code seperti
menghindari deteksi dari detektor karena setiap duplikasi dihasilkan memiliki signatur yang
berbeda sehingga akan menjadi tidak mungkin untuk menyimpan banyak signatur untuk satu
malware [6].

Penelitian ini dilakukan untuk mengembangkan sebuah binary obfuscator, yaitu obfuscator
yang digunakan untuk file executable menggunakan metode packing. Diharapkan dengan
tersedianya obfuscator ini tingkat keamanan code semakin baik.

1.2 Rumusan Masalah

Adapun rumusan masalah penelitian ini adalah:


a. Bagaimana proses pembangunan sistem obfuscator untuk kode biner yang bersifat
open source dalam mentransformasi sintaks code berdasarkan metode packing?
b. Bagaimana rancangan algoritma yang digunakan untuk melakukan obfuskasi
terhadap kode biner pada file executable?

1.3 Tujuan Penelitian

Tujuan dari penelitian ini adalah membangun sistem obfuscator untuk kode biner yang
bersifat open source untuk mentransformasi sintaks code dengan menggunakan metode
packing.

1.4 Ruang Lingkup dan Batasan

Ruang lingkup penelitian adalah platform yang dikembangkan pada penelitian ini berbasis
desktop atau command line interface.

Penelitian ini dibatasi dengan beberapa hak sebagai berikut:

a. Obfuscator yang akan dibangun pada penelitian ini hanya dapat berjalan pada sistem
operasi windows.
b. Aplikasi yang akan diteliti pada penelitian ini merupakan sebuah file executable yang
tidak mempunyai source code.

6
1.5 Arsitektur Sistem yang Dibangun

Gambar 1. Arsitektur sistem yang akan dibangun

Gambar di atas menunjukkan arsitektur sistem yang akan dibangun. Input terhadap sistem
adalah file executable yang akan diobfuskasi, dan stub (DLL). Stub (DLL) yang dimaksud
adalah encoder yang digunakan. Kedua input-an ini akan menghasilkan sebuah file
executable baru (Packed Exe).

7
BAB 2. LANDASAN TEORI

2.1 Obfuskasi
Obfuskasi adalah teknik untuk mentransformasi kode program ke dalam bentuk yang berbeda
tetapi maknanya tetap sama, atau dengan kata lain mengubah sintaks program tanpa
mengubah semantiknya. Pada prinsipnya obfuskasi dapat diterapkan pada source code
maupun berkas biner dimana source code-nya tidak tersedia. Obfuskasi membuat kode atau
program sulit untuk dianalisis dengan menghalangi pemeriksaan manual dan otomatis.
Obfuscation bisa dilakukan manual atau dengan tool yang disebut “obfuscator”. Sementara
dari sisi reverse engineering, proses mengembalikan struktur code kebentuk awal disebut
“deobfuscation”.
Metode obfuskasi yang paling sering digunakan adalah:
a. Polymorphism.
Polymorphism merupakan teknik obfuskasi yang mendekripsi loop menggunakan
beberapa transformasi, seperti menambahkan nop (instruksi computer yang tidak
melakukan apa-apa), code transposition (merubah urutan instruksi dan menempatkan
instruksi jump untuk mempertahankan semantik aslinya) dan register reassignment
(mengubah susunan alokasi register). [7]
b. Metamorphism
Metamorphism merupakan teknik obfuskasi yang melakukan obfukasi pada
keseluruhan virus untuk menghindari deteksi. Ketika virus menggandakan diri, virus
akan mengubah kodenya dengan berbagai cara, seperti code transposition (merubah
urutan instruksi dan menempatkan instruksi jump untuk mempertahankan semantik
aslinya), penggantian dari urutan instuksi yang sejenis, merubah conditional jumps,
dan register reassignment (mengubah susunan alokasi register). [7]
c. Packing
Packing adalah metode obfuskasi yang menyembunyikan code sebenarnya dengan
menggunakan satu atau lebih layer compression (enkripsi). [6]

Aturan kinerja dalam obfuskasi diukur berdasarkan 3 kategori berikut, yaitu seberapa banyak
ketidakjelasan yang ditambahkan ke dalam program (the potency), seberapa sulit
deobfuskator memecahkan obfuskasi secara otomatis (the resilience), dan seberapa banyak
komputasi yang ditambahkan pada aplikasi yang diobfuskasi (the cost) [8].

8
a. The Potency
The Potency merupakan derajat yang menunjukkan seberapa bingung user yang
membaca kode tersebut.
b. The resilience
The resilience merupakan derajat yang menunjukkan seberapa tahan kode yang
diobfuskasi terhadap tools deobfustacor yang berkembangkan.
c. The cost
The cost merupakan seberapa banyak overhead yang dilakukan oleh sebuah applikasi.

Terdapat 3 isu utama yang menjadi cost dari obfuskasi, yaitu:


1. Code Bloat. Obfuscator mengaburkan sebuah program dengan menyembunyikan
control flow yang sebenarnya dibalik control flow palsu. Sebagai hasilnya, program
yang sudah diobfuskasi akan berukuran lebih besar dari program aslinya.
2. Data Bloat. Tingkat keburaman program bergantung pada struktur data dinamis
bersifat kompleks yang dihasilkan obfuscator saat dijalankan. Dengan demikian,
program yang diobfuskasi akan menghasilkan lebih banyak data dinamis daripada
program aslinya.
3. Cycle Bloat. Setiap instruksi yang dideklarasikan atau yang bukan merupakan bagian
dari dead code akan dieksekusi oleh interpreter. Akibatnya, program yang sudah
diobfuskasi akan mengeksekusi lebih banyak instruction cycles daripada program
aslinya. [8]

Obfuskasi dapat dilakukan dengan beberapa pendekatan yaitu code obfuscation dan data
obfuscation [9]. Semua tipe obfuskasi digunakan untuk mengubah program menjadi lebih
sulit dimengerti oleh attacker, namun pada saat yang sama digunakan juga untuk menjaga
fungsi program yang asli. Dalam hal ini data obfuscation ditransfaormasikan untuk
mengubah sebuah program dengan tujuan agar konten variabel dan penggunaannya dapat
tersembunyi, sementara code obfuscation mengubah tata letak serta mengontrol kode
sehingga sulit untuk di pahami.

9
Code obfuscation target

]
a. Layout obfuscation

Layout obfuscation sering juga disebut sebagai lexical transformations, merupakan


bentuk obfuskasi yang paling sederhana tetapi memiliki potensi yang rendah yaitu
one-way transformation. Layout obfuscation dapat menghapus komentar, perubahan
format yang terbatas serta over loading.
b. Data obfuscation

Data obfuscation dapat digunakan untuk membuat sebuah program menjadi sulit
dipahami. Transformasi ini dapat diklasifikasikan ke dalam bentuk storage and
encoding, aggregation dan ordering ofl data. Obfuscation storage and encoding
transformation digunakan untuk memilih langkah yang tepat untuk mengkodekan
serta menyimpan data kedalam sebuah program. Contohnya yaitu: mengubah variabel
dari bentuk khusus ke dalam bentuk yang lebih umum. Aggregation digunakan untuk
mengubah struktur data sebuah program dengan cara mengubah data item yang

10
dikelompokkan secara bersamaan. Sedangkan Ordering transformation digunakan
untuk mengacak urutan deklarasi dalam sebuah program.

c. Control obfuscation

Control obfuscation bertujuan untuk mengubah aliran program, merusak hubungan


antara original code dengan obfuscation code, yang dapat diklasifikasikan kedalam
bentuk aggregation, ordering serta Computation transformation.
Computation transformation digunakan untuk menyisipkan code yang redundant
kedalam sebuah program. Control aggregation transformations digunakan untuk
membuat kode lebih sulit dipahami dengan cara merusak abstraksi yang
direpresentasikan dengan prosedur dan struktur control lainnya. Sedangkan Control
ordering transformation digunakan untuk mengubah urutan statements, blocks atau
methods yang mana memiliki potensi yang sangat rendah tetapi memiliki tingkat
ketahanan yang tinggi serta resilience. Dalam hal ini akan sangat mustahil apabila
seorang automatic deobfuscator dapat mengembalikan code ordering ke dalam
bentuk aslinya.
d. Preventative obfuscation

11
Preventative obfuscation bekerja dengan cara merusak teknik deobfuskasi yang telah
diketahui sebelumnya.

2.2 Packer
Packer adalah sebuah tool yang dapat digunakan untuk mengubah sebuah executable
ke dalam executable lain dengan menunjukkan fungsi yang sama tetapi memiliki jejak
(footprint) yang berbeda pada file system dimana dia berada. Packer biasanya disebut
juga sebagai protectors dikarenakan packer bertugas untuk melindungi executable
asli.
Terdapat 3 jenis packer yaitu [10]:
a. Single-layer packing algorithm
Single-layer packing algorithm merupakan packer yang paling sederhana, dimana
hanya menggunakan satu packer untuk setiap pack binary.
b. Re-packing algorithm
Packers ini berisi re-packed unpacking layers yang masing-masing dijalankan
secara berurutan untuk meng-unpack setiap sections. Re-packing algorithm
menggunakan dua kali packer yang sama untuk setiap paket binary dan Teknik
compression yang mirip dengan single-layer packer tetapi mengubah ukurannya.
c. Multi-layer packing algorithm
Packers ini berisi beberapa unpacking layer yang masing-masing dijalankan
secara berurutan. Multi-layer packing algorithm menggunakan kombinasi
potensial dari packer yang berbeda untuk setiap paker biner. Packer ini juga
digunakan untuk mengubah ukuran, jumlah sections dan nama dari single-layer
yang executable.

12
Packer Evolution
a. Generasi pertama: Compressor
Generasi pertama packer yaitu compressor yang dirancang untuk mengurangi storage
requirements dari software melalui compression. Compressor biasanya berisi sedikit
atau bahkan tidak ada enkripsi. Mesin compression digunakan untuk menampilkan
kecepatan decompression tanpa adanya penurunan compression ratio nya. Beberapa
compressor yang populer yaitu Ultimate Packer for eXecutables (UPX), the Ultimate
PE Packer (UPack), ASPack, PECompact, FSG, dan MEW [11].
b. Generasi kedua: Protector
Dalam generasi kedua packer, compression dan encryption digabungkan dalam
sebuah protectors. Contoh umum cryptors/protectors executable yaitu: Yoda’s
Crypter, ASProtect, Armadillo, Morphine, EXECryptor, Obsidium, Enigma, dan
Themida. Packers seperti tElock dan Yoda’s menerapkan multistage unpacking untuk
mendeskripsikan unpacking stub sebelum di eksekusi dan dienkripsi [11].
c. Generasi ketiga: Virtual Machine (VM) protection system
Virtual machine protection system mengkonversikan bagian dari code asli ke dalam
bytecodes nya sendiri [11].

Packing
Packing merupakan metode obfuskasi yang paling sering digunakan oleh malware authors
untuk menjalankan pendeteksian terhadap malware [11]. Packed file memiliki dua komponen
dasar yaitu blok data dan unpacking stub. Blok data merupakan bentuk compresi dan

13
enkripsi dari file executable asli sedangkan unpacking stub merupakan cara dinamis yang
dapat mengembalikan file executable yang asli. Ketika packed file dijalankan, pertama sekali
unpacking stub akan mengeksekusi code executable yang asli kemudian mentransfer control
ke dalam file asli tersebut.
Packer analysis terdiri atas tiga tugas utama yaitu [5]:
a. Mendeteksi PE Packer yang sedang digunakan.
b. Memindahkan PE packer’s unpacking stub dan memperbaiki executable yang asli.
c. Mengidentifikasi packer yang sedang digunakan.

Contoh program menggunakan packing [12]:

Unpacking
Terdapat tiga pendekatan yang telah dikembangkan untuk meng-unpack packed
executables yaitu: manual unpacking, static unpacking dan generic unpacking [11].
1. Manual unpacking
Peneliti AV(antivirus) sering menggunakan lingkungan yang terkontrol untuk
mengeksekusi packed binary didalam sebuah Win32 debugger, seperti OllyDBG
untuk manual unpacking. Banyak packers yang menggunakan metode obfuskasi
untuk mengubah tanda tangan dengan memasukkan junk code. Namun beberapa

14
packer menggunakan string palsu dari packer lain atau standard compiler code
untuk menipu packer recognizer.
Hal yang perlu diperhatikan untuk menentukan apakah OEP telah tercapai atau
tidak yaitu [11]:
a. ESP rule
Esp rule menggunakan instruksi Push (PUSHAD) untuk membuat backup dari
register ke dalam sebuah stack sebelum proses unpacking dijalankan dan
instruksi Pop (POPAD) untuk mengambil semua register dari stack setelah
proses unpacking selesai.
b. Jumps to a different section
Selama proses packing, packer biasanya membuat section baru dan
menyimpan unpacking stub disana. Sehingga ketika proses unpacking selesai,
kode unpacking akan mengambil titik lompat (intersection jump) ke dalam file
asli yang di unpacked ke dalam section yang lain.
c. Executes on the newly written memory
File asli di compressed/encrypted ke dalam sebuah packed file. Unpacker
dibutuhkan untuk men-decompress/decrypt file dan menyimpannya ke dalam
memori sehingga code nya dapat dijalankan.
d. Reaches standard compiler’s entry point
Jenis Compilers yang sering digunakan seperti Microsoft Visual C++, GNU
C++, dan Delphi.
2. Static unpacking
Static unpacking adalah pendekatan yang digunakan oleh malware detectors untuk
mengotomatiskan unpacking. Namun pendekatan ini memiliki beberapa masalah
yaitu
yang pertama, malware authors akan dengan mudah melewatinya dengan berbagai
metode obfuskasi. Kedua, code yang spesifik dibutuhkan untuk setiap packer.
Ketiga, akan membutuhkan sebuah non-trivial amount untuk mengembangkan
unpacker yang akurat.
3. Generic unpacking
Beberapa Teknik dalam generic unpacking yaitu [11] :
a. Run and Dump

15
Teknik Run and Dump merupakan Teknik yang paling cepat dan efektif
namun tidak menunjukkan titik yang tepat untuk menghentikan program yang
sedang berjalan
b. Emulation
Computing emulation merupakan sebuah Teknik keamanan yang bersifat
portable dan sangat kuat dalam meng- unpacking sebuah tool. Namun
memiliki beberapa kekurangan yaitu: pertama, sangat sulit untuk menentukan
kapan proses unpacking selesai dan emulator berhenti. Kedua,emulator dapat
dengan mudah tertipu dengan trik anti-emulation. Ketiga, emulation
membutuhkan computational overhead lebih sehingga mengakibatkan
prosesnya berjalan sangat lambat.
c. Debugger Scripts
Scripts ini berlaku untuk meng-unpacking heuristic tertentu.
d. Normalization Algorithm
Untuk packed programs, awalnya menggunakan modified versi emulator,
mengumpulkan semua memory write serta memonitor execution flow.
Kemudian itu akan mengkontruksi sebuah program normalized yang berisi
code dan menghilangkan semua tulisan.
e. Automated Tools
Terdapat beberapa cara yang digunakan dalam membangun tools untuk meng-
automated malware unpacking. Cara tersebut di dasarkan pada sifat instrinsik
packer yang mana unpacked code diciptakan maupun di modifikasi dengan
unpacking stub pada jangka waktu tertentu
Contoh progam unpacking [12]:

16
2.3 Portable Executable File Format
Portable Executable File Format adalah format file standar untuk file yang dapat dieksekusi
(executable), kode objek, dan Dynamic Link Libraries (DLLs) yang digunakan dalam sistem
operasi Windows versi 32 dan 64-bit. Portable Executable dihasilkan pada saat dilakukan
code production. Code production yang dimaksud dapat dilihat pada Gambar 2 berikut.

Gambar 2. Code production

Berdasarkan gambar di atas, dapat dilihat bahwa sebuah file executable berawal dari source
code yang dicompile dan kemudian dilink. Source code yang dicompile dengan compiler
tertentu akan menghasilkan file object (file berekstensi .o), sehingga dibutuhkan linker untuk
mengubah file object tersebut menjadi file executable (.exe).
Windows membutuhkan executable dengan format yang spesifik untuk mempercepat loading
dan eksekusi oleh sistem operasi Windows. Di bawah ini ditampilkan struktur dari Portable
Executable.

17
Gambar 3. Struktur PE file format

Struktur PE file format dapat dikelompokkan menjadi dua bagian, yaitu header dan sections.
Header berisi metadata tentang executable yang mendeskripsikan section yang berbeda.
Sedangkan section adalah kumpulan bytes yang ditempatkan dalam urutan-urutan oleh
compiler.

Minimalnya, sebuah file PE memiliki 2 section. Satu untuk cde dan satu lagi untuk data.
Aplikasi yang dibuat untuk Windows NT memiliki beberapa section, yaitu, .text, .bss, .rdata,
.data, .rsrc, .edata, .idata, .pdata, dan .debug. namun secara umum, section yang dimiliki
oleh file executable adalah:

a. Executable Code Section: .text atau CODE


b. Data Sections: .data, .rdata, atau .bss, yaitu DATA
c. Resources Section: .rsrc
d. Export Data Section: .edata
e. Import Data Section: .idata
f. Debug Information Section: .debug

Semua file PE diawali dengan DOS Header yang menempati 64 byte pertama pada file. Jika sebuah
program dijalankan dari DOS, DOS akan mengenalinya sebagai executable yang valid dan merun
DOS stub yang disimpan setelah header. Ketika membangun sebuah aplikasi untuk Windows, linker
akan me-link WINSTUB.EXE (sebuah default stub) ke dalam file executable dari aplikasi yang
dibangun tersebut.

PE header adalah sebuah terminologi umum untuk struktur IMAGE_NT_HEADERS. Struktur ini
terdiri dari informasi-informasi penting yang digunakan oleh loader. Struktur sebuah file PE dalam
disk sama dengan strukturnya ketika diload ke memori, sehingga jika diketahui lokasi sebuah file
dalam disk, file tersebut dapat ditemukan ketika telah diload ke memori.

18
Gambar 4. Virtual memory file PE

Konsep dari virtual memory adalah tidak mengijinkan software mengakses physical memory
secara langsung OS dan processor membuat sebuah layer yang tidak terlihat. Setiap waktu,
terjadi proses untuk mengakses memori. Processor akan memeriksa page table yang
menunjukkan alamat physical memory mana yang harusnya digunakan. Di bawah ini adalah
tampilan dari PE viewer (PEview).

Gambar 5. Tampilan PEView

2.4 Windows Dynamic Link Library (DLL)


DLL (Dynamic Link Library) adalah pustaka yang mengandung kode dan data yang dapat
digunakan oleh lebih dari satu program dalam waktu yang bersamaan. Contohnya pada
sistem operasi Windows, comdlg32 DLL menjalankan fungsi yang berkaitan dengan common
dialog box. Oleh karena itu, program yang lain dapat menggunakan fungsi yang terdapat
dalam DLL tersebut untuk mengimplementasikan dialog box. Hal tersebut membantu dalam
code reuse dan penggunaan memori yang lebih efisien. [13]

19
Dengan menggunakan DLL, program dapat dimodularisasi menjadi komponen yang terpisah.
Contohnya program penjualan terdapat dalam modul. Modul tersebut dapat dimuat ke
program utama jika modul telah terinstall. Dikarenakan modul yang terpisah dengan program
utama, waktu dijalankannya program menjadi lebih cepat dan modul tersebut dipanggil hanya
jika ada permintaan. Begitu juga ketika memperbaharui program menjadi lebih mudah karena
dapat diterapkan ke setiap modul tanpa mempengaruhi bagian dari program yang lain. [13]
Berikut adalah beberapa keuntungan jika suatu program menggunakan DLL:
a. Menggunakan sumber daya yang lebih sedikit. Ketika beberapa program
menggunakan pustaka fungsi yang sama, DLL dapat mengurangi duplikasi kode yang
dimuat pada disk dan dalam memori fisik. Ini dapat sangat memengaruhi kinerja
bukan hanya program yang berjalan di latar depan, tetapi juga program lain yang
berjalan di sistem operasi Windows. [13]
b. Maintenance dan Upgrade bisa lerbih mudah. Ketika aplikasi menggunakan fungsi
dari DLL dan selama argumen fungsi dan return values tidak berubah, maka dapat
diterapkan perbaikan bug dan menyebarkan pembaruan ke DLL. Ketika DLL
diperbarui, aplikasi yang menggunakannya tidak perlu dikompilasi ulang atau di-link
ulang. [14]
c. Dynamic Link membuat lebih mudah untuk mendukung aplikasi yang ditulis dalam
bahasa pemrograman yang berbeda. Program yang ditulis dalam bahasa pemrograman
yang berbeda dapat memanggil fungsi DLL yang sama selama program mengikuti
konvensi pemanggilan fungsi. [14]

Terdapat 2 metode dalam Dynamic Linking:


1) Load-time Dynamic Linking
Pada load-time dynamic linking, aplikasi memanggil secara eksplisit ke fungsi DLL
yang diekspor seperti local function. Untuk menggunakan load-time dynamic linking,
sediakan file header (.h) dan file libraries (.lib) saat proses kompilasi dan penautan
(link) aplikasi. Linker akan menyediakan sistem dengan informasi yang dibutuhkan
untuk memuat DLL dan menyelesaikan lokasi fungsi DLL yang diekspor ketika load
time [15].
Contoh program

20
Gambar 6. Contoh program Load Time Dynamic linking

2) Run-time Dynamic Linking


Dalam run-time dynamic linking, aplikasi memanggil fungsi LoadLibrary atau fungsi
LoadLibraryEx untuk memuat DLL pada saat run time. Setelah DLL berhasil dimuat,
digunakan fungsi GetProcAddress untuk mendapatkan alamat fungsi DLL yang
diekspor yang ingin dipanggil. Pada metode ini tidak diperlukan impor file libraries
(.lib) [16].
Contoh program

Gambar 7. Contoh program run time dynamic linking

2.5 Dynamic Link Library (DLL) Injection


DLL Injection adalah salah satu teknik untuk menginjeksi malware ke dalam sebuah file
executable. Ide dasar dari DLL adalah membuat alamat dari LoadLibrary menuju salah satu
dari APIs sehingga remote process harus mengeksekusi DLL untuk kepentingan malware.
Malware menulis path pada malicious DLL di virtual address space-nya dan memastikan

21
bahwa remote process akan me-load malware tersebut dengan membuat sebuah remote
thread pada target. [17]

Gambar 8. Cara kerja DLL Injection

pertama sekali, malware menentukan sebuah proses yang akan dijadikan sebagai target
injeksi dengan memanggil APIs berikut:
a. CreateToolhelp32Snapshot: sebuah API untuk mendaftarkan semua state modul
dalam sebuah proses
b. Process32First: sebuah API untuk memberikan informasi tentang proses pertama
dalam sebuah snapshot.
c. Process32Next: sebuah API untuk mengulang CreateToolhelp32Snapshot dan
Process32First [18].

Setelah ditemukan target yang diinginkan, malware harus mendapatkan handle atas target
tersebut dengan memanggil fungsi OpenProcess. Lalu malware memanggil fungsi
VirtualAllocEx untuk memperoleh space untuk menulis path ke DLL. Malware kemudian
memanggil fungsi WriteProcessMemory untuk menulis path tersebut ke memori yang telah
dialokasikan. Pada tahap selanjutnya, akan dipanggil fungsi API seperti
CreateRemoteThread, NtCreateThreadEx, atau RtlCreateUserThread agar malware
dieksekusi pada file target.

22
BAB 3. METODE DAN JADWAL PENELITIAN
3.1 Metode Penelitian

Metode penelitian ini menggunakan metodologi pengembangan sistem perangkat lunak.


Dapat dilihat pada Gambar 1 berikut.

Gambar 9. Metodologi Penelitian

Penjelasan setiap langkah penelitian diberikan sebagai berikut.

1. Langkah 1: Problem Definition


Problem Definition adalah tahap untuk perumusan masalah yang akan dibahas dalam
penelitian, latar belakang dilaksanakannya penelitian, maupun batasan penelitian yang
akan dilakukan.
2. Langkah 2: Studi Literatur

23
Studi Literatur adalah tahapan untuk mempelajari teori yang akan digunakan selama
proses penelitian. Teori yang dibahas adalah obfuscation, Packer, Portable
Executable, Dynamin Link Library, dan Dynamic Link Library Injection
3. Langkah 3: Pengembangan tools obfuscator
Tahap ini adalah tahap implementasi yang dimulai dengan perancangan algoritma
packing yang akan digunakan, bagaimana parsing yang dilakukan terhadap file
portable executable, penerapan DLL Injection, dan implementasi stub untuk
encoder/decoder.
4. Langkah 4: Experiment
Tahap experiment dilakukan dengan mengumpulkan beberapa sample file executable.
File executable tersebut akan diobfuskasi secara otomatis dengan tools yang
dikembangkan.
5. Langkah 5: Summary result
Pada tahap ini diperoleh hasil penelitian secara menyeluruh.

3.2 Jadwal Penelitian

Gambar 10. Jadwal Penelitian

24
DAFTAR PUSTAKA

[1] E. Medlyn, “ETHICAL HACKING: AN IMPACT ON SOCIETY,” Cyber Times International Journal of
Technology & Management Vol. 7 Issue 1, 8 June 2013.
[2] e. a. Marvin Minsky, “Society Intelligent Surveillance,” The Society of Intelligent Veillance, 2013.
[3] American Heritage Dictionary, Amerika.
[4] C. Coliberg, Watermarking, Temper-Proofing and Obfuscation - Tools for software Protection, 2010.
[5] e. a. M. Christodorescu, Semantics-Aware Malware Detection, Oakland: IEEE Symposium on Securityand
Privacy (S&P'05), 2005.
[6] Prabhu Goal Research Center, Hack.in 2009, Kanpur, 2009.
[7] M. Christodorescu, S. Jha, S. A. Seshia dan R. E. Bryant, “Semantics-Aware Malware Detection,” dalam
2005 IEEE Symposium on Security and Privacy (S&P'05), Oakland, 2005.
[8] C. Collberg, C. Thomborson dan D. Low, “Manufacturing Cheap, Resilient and Stealthy Opaque
Constructs,” dalam POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles
of programming languages , San Diego, 1998.
[9] L. R. e. a. Alessio Viticchi´, “Assessment of Source Code Obfuscation Techniques,” p. 1.
[10] e. a. Munkhbayar Bat-Erdene, “Packer Detection for Multi-Layer Executables Using Entropy Analysis,” p.
18, 2017.
[11] L. Sun, “A Framework for Malware Packer Analysis Using Information Theory and Statistical Methods,”
pp. 22-43.
[12] e. a. Leyla Bilge, “Thwarting Real-Time Dynamic Unpacking,” p. 5.
[13] “Microsoft Support,” Microsoft, 18 April 2018. [Online]. Available: https://support.microsoft.com/en-
us/help/815065/what-is-a-dll. [Diakses 25 September 2018].
[14] “Microsoft Docs,” Microsoft, 11 April 2016. [Online]. Available: https://docs.microsoft.com/en-
us/cpp/build/dlls-in-visual-cpp?view=vs-2017#advantages-of-using-dlls. [Diakses 20 September 2018].
[15] “Microsoft Docs,” MIcrosoft, 31 May 2018. [Online]. Available: https://docs.microsoft.com/en-
us/windows/desktop/dlls/using-load-time-dynamic-linking. [Diakses 20 September 2018].
[16] “Microsoft Docs,” Microsoft, 31 May 2018. [Online]. Available: https://docs.microsoft.com/en-
us/windows/desktop/dlls/using-run-time-dynamic-linking. [Diakses 20 September 2018].
[17] A. Hosseini, “EndGame,” 18 July 2017. [Online]. Available: https://www.endgame.com/blog/technical-
blog/ten-process-injection-techniques-technical-survey-common-and-trending-process. [Diakses 19
November 2018].
[18] Microsoft, “Microsoft,” 15 11 2018. [Online]. Available: https://docs.microsoft.com/en-
us/windows/desktop/api/tlhelp32/nf-tlhelp32-createtoolhelp32snapshot. [Diakses 19 11 2018].
[19] C. CS, “Watermarking, Temper-Proofing and Obfuscation – Tools for Software Protection, IEEE Transc
On Software Engineering,” vol. 28 No 6, 2002.
[20] W. Wardiana, “Pencegah Pembajakan Perangkat Lunak dengan Menggunakan Teknik Identity-Based
Encryption dan Obfuscation,” p. 3.

25

Anda mungkin juga menyukai