Kamis, 26 Maret 2009

Steganography (2): The Secret Revealed

Now, for the secret behind the little girl's smile. :-)


Gambar gadis kecil tersenyum pada posting sebelumnya, seperti bisa ditebak dari judul posting-nya, menyimpan rahasia yang ditanam dengan metode steganografi. Skema penyimpanan yang saya lakukan sangat sederhana dan klasik, yaitu dengan mengubah nilai bit tertentu dari setiap byte pada gambar asal. Posisi bit dipilih sedemikian rupa sehingga perubahan nilainya tidak berpengaruh banyak pada citra sebagaimana dipersepsikan oleh orang yang melihatnya. Cara paling sederhana tentunya dengan memodifikasi nilai bit terakhir (LSB - least significant byte).

Operasi pada citra saya lakukan dengan script Python, dengan menggunakan library PIL (Python Imaging Library). PIL dapat diunduh dari http://www.pythonware.com/products/pil/
Baik gambar maupun format merupakan citra berekstensi .png. Setiap titik pada gambar diwakili oleh sebuah tripel (semacam array dengan karakteristik tertentu, masing-masing tripel memiliki tiga nilai) yang terdiri dari tiga nilai byte. Dalam hal ini, saya memilih untuk memodifikasi LSB dari byte yang berada di tengah. Pesan yang ditanam berupa citra dengan muatan teks berwarna hitam dengan latar belakang putih. Penyandian dilakukan dengan mewakili setiap titik berwarna hitam dengan nilai bit '0' dan setiap titik berwarna putih dengan nilai bit '1'.

Citra asli dari gadis kecil tersenyum adalah sebagai berikut:
(Citra adalah karya dari thejbird - http://www.flickr.com/photos/jbird/37395571)





Saya menggunakan script Python sebagai berikut untuk memasukkan pesan ke dalam citra awal:

import PIL
import Image

img = Image.open("innocent_thejbird.png")
img_pix = img.load()

msg = Image.open("kebon_bibit.png")
msg_pix = msg.load()

for i in range(img.size[0]):
for j in range(img.size[1]):
secret = 0 if (((msg_pix[i, j][0]+msg_pix[i, j][1]+msg_pix[i, j][2])/3) < 10) else 1
red    = img_pix[i, j][0]
green  = (img_pix[i, j][1] & 254) if (secret == 0) else (img_pix[i, j][1] | 1)
blue   = img_pix[i, j][2]
img.putpixel((i, j), (red, green, blue))
img.save("super_secret.png")


Hasil dari operasi di atas, sebagaimana ditampilkan pada posting sebelumnya (Steganography (1)), adalah sebagai berikut:





(No, really, this is not the same picture as the one above. :-) )


Untuk mengekstrak kembali pesan dari citra gadis kecil yang telah termodifikasi, saya menggunakan script sebagai berikut (dalam hal ini dijalankan melalui konsol interaktif Python):


>>> steg = Image.open("super_secret.png")
>>> steg_pix = steg.load()
>>> for i in range(steg.size[0]):
for j in range(steg.size[1]):
reveal = 255 * (steg_pix[i, j][1] & 1)
steg.putpixel((i, j), (reveal, reveal, reveal))

>>> steg.save("secret_revealed.png")


Dan hasilnya adalah....




Karena ini merupakan tugas kuliah (II5166 Keamanan Informasi Lanjut, diajarkan oleh Pak Budi Rahardjo), ya, pesan di atas tidak memiliki arti lain, hanya 'KEBON BIBIT' saja. The secret that the little girl hides *indeed* is as innocent as her smile. :-)

Citra asli dari pesan yang ditanam adalah sebagai berikut:





Sebagai catatan, skema steganografi dengan modifikasi LSB ini sangat rentan terhadap kompresi. Awalnya saya menyimpan citra hasil pengolahan dalam format .jpg, namun ternyata
ekstraksi pesan terhadap citra yang mengandung pesan gagal dilakukan; ekstraksi tidak menghasilkan pola 'KEBON BIBIT', melainkan hanya pola acak (seperti semut-semut di televisi yang sudah habis siarannya :-D). Ini menunjukkan bahwa penyimpanan citra mengalami suatu proses (kemungkinan kompresi), yang mengubah nilai-nilai LSB yang sudah dimodifikasi (I spent a good half-day trying to figure out what was wrong!). Kemudian saya mencoba menggunakan format .png, suatu format yang bersifat lossless, dan pesan berhasil disimpan diekstrak dengan memuaskan. :-)

As a closing note, thanks is due to Ian Malpass. This assignment was inspired by his work:


Ian wrote his code in Perl, which I adapted to Python.

Steganography (1): Her Innocent Smile



























The secret she hides is as innocent as her smile. :-)


Artwork information:
Untitled - thejbird

Senin, 23 Maret 2009

Pengecekan Port menggunakan NMAP

  • Pada percobaan pertama, diketahui bahwa ternyata sistem operasi Windows yang dipergunakan pada komputer host yang diuji tidak memperbolehkan port scan dilakukan pada komputer host sendiri.
  • Untuk itu, sebelum percobaan berikutnya dilaksanakan, pertama-tama dilakukan instalasi VMWare pada komputer host. Pada virtual machine yang dihasilkan dilakukan instalasi sistem operasi Ubuntu 8.04. Setelah itu, NMAP diunduh dan di-install pada sistem operasi Ubuntu.
  • Selanjutnya port scan menggunakan NMAP dilakukan pada sistem operasi Windows dari sistem operasi Ubuntu yang berjalan di atas VMWare tersebut. Pengalamatan dilakukan dengan alamat IP eksplisit dari host Windows sebagai berikut:

root@victoria:/home/renny# nmap 167.205.67.30

Starting Nmap 4.53 ( http://insecure.org ) at 2009-03-21 17:45 WIT
Interesting ports on lss-67-30.ee.itb.ac.id (167.205.67.30):
Not shown: 1711 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
443/tcp  open  https
3306/tcp open  mysql
MAC Address: 00:1D:72:2C:56:68 (Wistron)

Nmap done: 1 IP address (1 host up) scanned in 23.532 seconds


  • Dari hasil port scan di atas, terlihat bahwa pada saat percobaan dilaksanakan terdapat tiga port yang terbuka, yaitu port untuk layanan http, https, dan mysql. Hal ini disebabkan karena pada saat itu layanan web server Apache dan basis data mysql sedang berjalan.
  • Setelah itu, dilakukan percobaan port scanning pada sistem operasi Ubuntu dari NMAP yang berjalan pada sistem operasi Ubuntu itu sendiri, dengan modus pengalamatan menggunakan IP eksplisit. Hasil dari percobaan tersebut adalah sebagai berikut:

root@victoria:/home/renny# nmap 167.205.67.45

Starting Nmap 4.53 ( http://insecure.org ) at 2009-03-21 17:46 WIT
All 1714 scanned ports on lss-67-45.ee.itb.ac.id (167.205.67.45) are closed

Nmap done: 1 IP address (1 host up) scanned in 0.329 seconds

  • Hasil percobaan di atas memperlihatkan bahwa pada sistem operasi Ubuntu pada komputer host tidak terdapat port yang terbuka. Hal ini disebabkan karena tidak adanya  web service yang sedang berjalan pada sistem tersebut.