Minggu, 19 April 2009

Sistem Operasi dan Web Server KPU

Dalam tugas pencarian sistem operasi dan web server KPU, kita dapat mempergunakan tool yang disediakan oleh Netcraft, http://news.netcraft.com/. Dengan mempergunakan Netcraft Toolbar, informasi yang dapat diperoleh mengenai situs kpu.go.id ditampilkan dalam screenshot sebagai berikut:





Informasi terpenting yang diperoleh dari gambar diatas adalah bahwa situs KPU beroperasi dengan sistem operasi FreeBSD dengan web server nginx versi 0.6.35.

Senin, 13 April 2009

'Membatik' E-Mail

Pada tugas kuliah Keamanan Informasi Lanjut kali ini, mahasiswa diminta untuk menampilkan suatu e-mail yang memiliki attachment lebih dari satu dalam versi plaintext, lengkap dengan seluruh header dan attachment dari e-mail tersebut. Karena e-mail dikirim dalam bentuk terkode, beberapa bagian dari e-mail, terutama misalnya attachment berupa gambar, akan terlihat sebagai huruf-huruf yang tersusun acak. Pak Budi menyebutnya, 'membatik'. :-)

Berikut ini adalah contoh kutipan e-mail yang mempertunjukkan tiga attachment berupa gambar .gif sederhana, berukuran masing-masing sekitar 1 KB. Bentuk 'asli' dari attachment adalah sebagai berikut:


heart.png


star.png


rainbow.png


Bentuk plaintext dari muatan e-mail adalah sebagai berikut:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="0-1490702233-1239610247=:50187"


--0-1490702233-1239610247=:50187
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Dearest beautiful, wonderful Renny,=0A=0A=0AWith this e-mail are attachment=
s from your magnificent self. Hopefully you would find in them pleasure and=
endless amusement.=0A=0AEnjoy! :-)=0A=0A-renny-=0A=0A=0A
--0-1490702233-1239610247=:50187
Content-Type: image/png; name="heart.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="heart.png"

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/I
NwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ/
SURBVDjLpZNLiI1xGMZ/3/edOWZojjkiudbMuEVMM4SMBVlbSUpZyAIhG4ql
kcJWycZOSslCMTNFuYVpRrkzLuMy5tA4xulcv//t/Vt80ZTLxltvz7N43vd5
F+8TeO/5n0r9JNLTs9A7t8FbO0WsfSvWdtdv2VIAKJ45kxWtt4rWh5xSQ6LU
yeldXVcAAu890t29zzt3hPp0ljBCyiVMofhMjNkmWldE64t1U5qWTpjXiiuV
qDx8RDX35ZxTalfgrl7d6K2+HC5cQBBGYAyk05jhYWrPX350WpcbWpsX17e0
QGEMwgiasnzv7eX7oyfHUmLt3mjWTIJqFXJfwAlYS13zHKKV7XN9rInqG6D/
AYgkBo0TyXSuId/Xvz0lxiyJMhkYegfGghdwDl68JpycgSiAwTeAgLYJ5scI
WgUXx5mUGJPGOYgVKJUs0CZZMpIDaxNnEfAOlAFxYDSilKRE66K3dlpgDcQ1
sC4ZtjbB8dxacBZSIYQhTqkwFKWu28FBmD0TKmWo1SCOwagEdZxgrZYYlEow
v4X8jVuIUudDp9SJyodP7+NPI9C2FNJRIipXk4FqDVQM1QrUhbB2FYXRMXJX
usdE667Ae0/++PFlotTZhmzjiknLlxOO5mDgCQRBcnq1Cm2L8M3zGO3p5fPt
e0/FmN0d/f13gp+v/Pnw4clOqQOi1P5sR1tj46wZcPceFMuwdjXFbwXen7+g
RevTYsyxjoGB/K9PHF/vduxY4ZQ61dQ8d/XUDevBWfJ37jJy/eaQaL2z/f79
a+P1wZ/C9Grz5ian1FHRek92zozg68s3l0Trg+19fUO/ib33f+3H69ZtetjZ
uf9fmuB/4/wDFoO2ZVesLdkAAAAASUVORK5CYII=

--0-1490702233-1239610247=:50187
Content-Type: image/png; name="star.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="star.png"

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/I
NwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIw
SURBVDjLlZLNS5RRFMafe9/3vjPOjI1jaKKEVH40tGgRBWEibfoPQoKkVdto
EQQF4T/QqkVtWrSTFrVsF1FgJbWpIAh1k2PNh+PrfL4f95zTQk0HHKkDD/cc
7vP8uHCuEhF0q/KnmXNgGR248PZFN4/GISXMC8L89DBPV0Dp4/SsazJjrtfb
9/vdxfn/BgjzY5M8Aq8nBya+V3h93vtnQHFxat4kszntJAAAxus1YvnZQV5V
/jyTEZarwnwFLGeFZdT0ZFOJdD84qoCDOpQ7grZfRNj020JSEOKvwvxGiF+q
0tL0N5PuO+Mk0nC0B0BDsYCCImyzAIktBBloMwKJLSgKYcMAcdhC2KpVlIig
+H5qxcv0n0xmj4Gbq+BwC2wtJLbgHUlMEFJwUpMIGpto16u+kJzSACAk+WCz
vNbe+AVljkOYIcQQou3TbvdOJo+g4aNdqzaF+PT43HJVA8DQpcVIiPPtaqlE
UQzlDELsTpgYwgTAQIjQqlUCtpQfn1spdmxh+PJSQyw9CrbKgM7tvcISQAxl
BhC3GuCYXk3cWP25m3M7dk88qbWBRDVApaATOSjPBdXXwYEP5QyCgvjE/kwH
gInHtHYBnYA2owhrPiiuw0sOw3EZFEagIB7qChDiYaUcNIoFtP1KxCTPhWiD
w7WbXk9vKpnOgsI4exjg6Mbq96YQPxm79uPOvqvbXx4O3KrF6w8osv2df17k
r5YXJq7vnw/S0v3k7Ie7xtud/wAaRnP+Cw8iKQAAAABJRU5ErkJggg==

--0-1490702233-1239610247=:50187
Content-Type: image/png; name="rainbow.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rainbow.png"

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/I
NwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIh
SURBVDjLjZPfS1NxGMbPjX9Bl/0PXqQzIYIEWWIpRFFBQwyNQqhG4VY0dUK0
gXQh+KMhu2nKIAkpAu0wkBA0f0QRtoLuFgSbOmSbZ+estsf3+e6ssE7hxXNz
4PM+7/d9nqMB0A6jr3Var2hJlBFZorKochhwUpQmkO65iC3/DWwP3sJO0Av5
9l/QI0qlmuux5buO7EMvcuM+5AInsRdqxo/5ART92j/hqMhIX7uMbOgudu+7
YYRdsMaPozRZ1c/EIKwHmiM8KyptD9xEbsyHQvAYSjZozZyC+boDxbeXYKUm
kF9vcHQu7QzdRn7KD/OxqwrGW1B8cx7GZheML1eVrO8R5N+5/nqzQWfC1miT
gs1X7TA+eBT0bdOD5yudCCRaMPF+CEej2oEBKb6Za9ecTb0TRrIbewLPLneg
d/4E2l824vSLBoQ3AjgypR2IqpJ9dAeF4cbfzgJnPnVhZLEVZ23wSsyHvkgc
Mf0jzvTP/RqQZlSF6D11ML6Za9OZcJuA555dQN+TOKb1JGb0z3i6kKwOsBtW
Zs6Miu7qYPbadCYcjCUUGJ5eQ09IJ2yKVjlgiQ1jSZgzo+K1eTC+mWvTmbB3
dLEGumu344AM68mGqbdLznTntXkwvplr05nwn73hAIvdZj3V+lISDmBUyj1S
dbfXdjsNKPPHYLdVPaVhLAlzZlS8tn0w06n2HFDhX8Ufg91mPdkwloQ589K2
Vp0G7AOR2a7+EgKeFAAAAABJRU5ErkJggg==

--0-1490702233-1239610247=:50187--

Seperti terlihat di atas, setiap bagian attachment diawali oleh string:

--0-1490702233-1239610247=:50187

String di atas tidak tetap seperti di atas nilainya, melainkan akan berbeda untuk e-mail yang berbeda. Selain awal dari masing-masing bagian attachment, string di atas juga muncul satu kali di akhir seluruh attachment.

Selain itu, setiap bagian attachment juga didahului dengan informasi mengenai attachment sebagai berikut:

Content-Type: image/png; name="heart.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="heart.png"

Contoh di atas adalah untuk berkas gambar bernama 'heart.png'.

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.