Kod cangkerang

Daripada Wikipedia, ensiklopedia bebas.

Dalam keselamatan komputer (computer security), kod cangkerang (shellcode) merupakan kod mesin boleh alih yang digunakan sebagai bebanan dalam mempergunakan pepijat perisian. Ia dikenali sebagai "kod cangkerang" kerana ia biasanya melaksanakan cangkerang perintah (command shell) yang membolehkan penyerang mengawal mesin yang terdedah. Disebabkan fungsi bebanan tidak terhad kepada sekadar menyalin dalam cangkerang, sesetengah pihak berpendapat bahawa nama kod cangkerang tidak tepat.[1] Bagaimanapun, usaha menggantikan istilah ini tidak diterima ramai.

Kod cangkerang boleh disimpan dalam proses ruang ingatan dan kemudiannya dilaksanakan menyebabkan penyerang mendapat kawalan penghintung perisian (program counter) dengan menggunakan kelemahan seperti peruntukan ingatan berasaskan tindanan (stack-based memory allocation) dan Peruntukan ingatan dinamik (Dynamic memory allocation) -berasaskan limpahan penimbal, atau serangan format rentetan (format string attacks). Terdapat beberapa kaedah mengawal penghintung perisian yang berbeza antara sistem pengendalian dan seni bina pemproses termasuk tulis tindan (overwriting) alamat kembali yang tersimpan dalam cangkerang tindan (stack frame) dan menindan pengendalian pengecualian (exception handlers).

Strategi perlaksanaan kod cangkerang[sunting | sunting sumber]

Sebahagian besar kod cangkerang ditulis tanpa penggunaan bait penamat null kerana ia bertujuan untuk dimasukkan ke dalam jujukan aksara (character arrays).


Bait null yang terdapat dalam rentetan akan menamatkan perlaksanaan kod cangkerang sebelum tiba masanya. Untuk menghasilkan kod cangkerang sedemikian, seseorang boleh mengkompil aturcara bebanan dengan pengkompil (sering kali C) dan kemudiannya menggantikan perintah dengan yang mengandungi sifar dengan perintah lain yang mempunyai kesan yang sama tetapi tanpa bait sifar. Sebagai contoh, melalui perintah sistem 32-bit x86:

mov eax, 1

mengandungi sifar sebagai sebahagian dari harafian (1 dikembangkan kepada 0x00000001), dengan itu menamatkan rentetan. Ini boleh ditulis sebagai dua perintah:

xor eax, eax
inc eax

yang mana bebas-NUL (kerana mengambil xor apajua dengan dirinya sendiri sentiasa menghasilkan 0). Sebagai tambahan, baris pertama boleh digunakan bagi hasil yang sama.

Lihat juga[sunting | sunting sumber]

Rujukan[sunting | sunting sumber]

  1. ^ Sockets, Shellcode, Porting, & Coding: Reverse Engineering Exploits and Tool Coding for Security Professionals. by James C. Foster and Stuart McClure (April 12, 2005). ISBN 1-59749-005-9

Pautan luar[sunting | sunting sumber]