Tampilkan postingan dengan label ICMP. Tampilkan semua postingan
Tampilkan postingan dengan label ICMP. Tampilkan semua postingan

Minggu, 25 Maret 2012

INTERNET CONTROL MESSAGE PROTOCOL (ICMP)


INTERNET CONTROL MESSAGE PROTOCOL (ICMP)

Dalam suatu sistem connectionless setiap gateway akan melakukan pengiriman, perutean datagram yang dating tanpa adanya koordinasi dengan pengirim pertama. Tidak semua sistem berjalan dengan lancar. Kegagalan dapat saja terjadi. misalnya line komunikasi, prosesor atau dikarenakan mesin tujuan tidak sedang aktif, ttl dari counter habis, atau ketika terjadi kemacetan sehingga gateway tidak lagi bisa memproses paket yang datang. Dalam koneksi dengan internet pengirim tidak dapat memberitahukan & tidak tahu sebab kegagalan suatu koneksi. Untuk mengatasinya diperlukan suatu metode yang mengijinkan gateway melaporkan error atau menyediakan informasi mengenai kejadian yang tidak diinginkan sehingga dipakai mekanisme ICMP. Pesan ICMP merupakan bagian dari datagram IP. Tujuan akhir dari suatu pesan ICMP bukan merupakan program atau user melainkan software internet-nya. Ketika pesan ICMP hadir software ICMP akan menanganinya.
ICMP mengijinkan gateway untuk mengirim pesan error ke gateway lain atau host. ICMP menyediakan komunikasi antar software protocol Internet. Pada dasarnya terdapat dua macam pesan ICMP : ICMP Error Message & ICMP Query Message. ICMP error message digunakan pada saat terjadi kesalahan pada jaringan, sedangkan query message adalah jenis pesan yang dihasilkan oleh protokol ICMP jika pengirim paket menginginkan informasi tertentu yang berkaitan dengan kondisi jaringan.
:arrow:Error & Query Reporting
Secara teknis ICMP adalam mekanisme error reporting untuk gateway sehingga dapat memberitahu sumber mengenai kesalahan yang terjadi. Sedangkan untuk koreksinya diserahkan pada program aplikasi yang ada pada pengirim. Pesan ICMP ini selalu dikirimkan kepada gateway awal. Jika suatu datagram yang melewati beberapa gateway mengalami kegagalan & kesalahan tujuan di intermediategatewaynya maka tidak dapat dideteksi gateway mana yang gagal tersebut. Ada beberapa jenis pesan error diantaranya :
- destination unreachable
pesan ini dihasilkan oleh router jika pengiriman paket mengalami kegagalan akibat masalah putusnya jalur, baik fisik maupun lojik. Pesan ini dapat dibagi menjadi beberapa tipe:
o network unreachable
jika jaringan tujuan tidak dapat dihubungi
o host unreachable
jika host tujuan tidak bisa dihubungi
o protocol at destination is unreachable
jika di tujuan tidak tersedia protokol tersebut
o port is unreachable
jika tidak ada port yang dimaksud pada tujuan
o destination network is unknown
jika network tujuan tidak diketahui
o destination host is unknown
jika host tujuan tidak diketahui
- time exceeded
dikirimkan jika is field TTL dalam paket IP sudah habis masa aktifnya dan paket belum juga sampai ke tujuannya
- parameter problem
pesan ini dikirim jika terjadi kesalahan parameter pada header paket IP
- source quench
jika router atau tujuan mengalami kemacetan, sebagai respon terhadap pesan ini maka pihak penerima harus memperlambat pengiriman paket
- redirect
dikirimkan jika router merasa host mengirimkan paket IP melalui router yang salah.
Sedangkan untuk pesan query diantarannya adalah :
- Echo & Echo Reply
Bertujuan untuk memeriksa apakah sistem tujuan dalam keadaan aktif. Program ping merupakan program pengiriman paket ini. Responder harus mengembalikan data yang sama dengan data yang dikirimkan
- Timestamp & Timestamp Reply
menghasilkan informasi waktu yang diperlukan sistem tujuan untuk memproses suatu paket
- Address Mask
Untuk mengetahui berapa netmask yang harus digunakan oleh suatu host dalam suatu network.
:arrow:Pengiriman ICMP Message
ICMP memerlukan dua level enkapsulasi seperti pada gambar dibawah ini

Setiap pesan ICMP merupakan bagian dari datagram IP yang juga merupakan bagain dari suatu frame data. Datagram yang membawa pesan ICMP mendapat perlakuan yang sama
dengan datagram lain dalam hal reliability & priority-nya. Pengecualian prioritas didapat untuk menghindari masalah : mendapat pesan error mengenai pesan error. Prioritas tersebut menentukan bahwa pesan tidak dibangkitkan untuk error yang disebabkan oleh datagram yang membawa pesan error.
:arrow:Format Pesan ICMP
Format diawali dengan 3 field :
8 bit     : field TYPE yang mengidentfikasikan pesan
8 bit     : field CODE yang menyediakan informasi lebih jauh tentang tipe pesan
16 bit   : field CHECKSUM untuk pengecekkan pesan ICMP
ICMP yang berisi pesan error terdiri dari header dan 64 bit pertamanya berisi penyebab error yang terjadi. Type field yang ada :

Beberapa waktu yang lalu saya menemukan sebuah website dengan vulnerability SQL injection. Sengaja nama website tersebut tidak saya publikasikan, karena artikel ini bukan tentang SQL injection melainkan bagaimana memecahkan enkripsi.
Berbeda dengan website lainnya, website tersebut menyimpan password dalam tabel user tidak dalam bentuk one-way hash (contohnya MD5 atau SHA1), melainkan dalam bentuk ter-enkripsi. Enkripsi yang dipakai juga unik karena tidak memakai algoritma enkripsi yang sudah dikenal luas.
Dalam kasus tersebut saya ingin melakukan privilege-escalation dari user dengan hak akses biasa menjadi user dengan hak akses penuh. Sebagai user biasa saya bisa melakukan SQLinjection untuk membaca username dan password dari tabel user. Dengan teknik tersebut saya mendapatkan encrypted password dari seorang user yang memiliki hak admin. Namun saya tidak bisa memakai password itu untuk menjadi admin sebelum saya mengerti pesan tersembunyi dalam chiphertext tersebut.
Analisa Ciphertext
Saya mencoba menggali informasi lebih dalam lagi tentang enkripsi unik di website tersebut. Saya mulai mengumpulkan banyak ciphertext dari user-user lainnya. Berikut beberapa ciphertext yang saya kumpulkan:
  • 804881451156416021528145
  • 9436353935332546555225378546953924846491
  • 11763273927622732276427712808233523172328227
Ada beberapa poin penting yang saya dapatkan dari pengumpulan ciphertext tersebut:
  • Panjang ciphertext bervariasi
Panjang ciphertext yang bervariasi membuat saya yakin bahwa itu bukan fungsi hash, karena ciri khas fungsi hash adalah panjang hash yang selalu tetap. Panjang ciphertext yang bervariasi kemungkinan besar tergantung dari panjang atau pendeknya password user tersebut. Nanti saya akan coba konfirmasi hipotesa ini dengan mengubah password user biasa yang saya pakai.
  • Ciphertext hanya terdiri dari angka
Ciphertext yang semua berupa angka membuat saya curiga bahwa ini adalah kode, semacam kode ASCII namun sudah dikalkulasi dengan formula matematis tertentu.
Chosen-Plaintext Attack
Chosen-Plaintext attack adalah salah satu cara “code breaking” (cryptanalysis) dengan cara membandingkan dan menganalisa contoh plaintext dan ciphertextnya. Dalam chosen plaintext attack, code breaker memiliki kebebasan untuk menentukan plaintext yang diiginkannya.
Untuk mendapatkan contoh plaintext dan ciphertextnya, saya melakukan langkah berikut ini setelah login sebagai seorang user biasa:
  1. Ubah Password
  2. Lihat ciphertext dari tabel user dengan SQLinjection
Pertama saya ubah password menjadi ‘d’, kemudian saya lihat ciphertext untuk plaintext ‘d’. Saya ulangi langkah itu dengan contoh plaintext yang lain berkali-kali.
Apa saja plaintext yang saya pilih? Berikut chosen-plaintext dan ciphertextnya yang saya pilih:
Plaintext
Ciphertext
d
92254325
dd
831214121412
ddd
6180128012807280
dddd
15013601660186017601
abcd1234
433034273428242944308379538023819382
Perhatikan bahwa panjang ciphertext tergantung dari panjang plaintext.  Plaintext sepanjang 1 karakter, ciphertext panjangnya 8 digit. Setiap penambahan satu karakter plaintext, ciphertext bertambah 4 digit.
Saya sengaja memilih plaintext berurutan (d,dd,ddd,dddd) untuk melihat apa ada pola yang muncul. Perhatikan pada plaintext “dd”, ciphertextnya adalah 831214121412, terlihat pola berulang pada angka 412 sebanyak 2x. Dalam ciphertext ini saya menyimpulkan bahwa 412 adalah kode untuk karakter ‘d’.
Untuk plaintext “ddd”, ciphertextnya adalah 6180128012807280, terlihat pola berulang pada angka 280 sebanyak 3 kali. Dalam ciphertext ini saya menyimpulkan bahwa 280 adalah kode untuk karakter ‘d’.
Begitu juga pada plaintext “dddd”, ciphertextnya adalah 15013601660186017601, dengan pola berulang pada angka 601 sebanyak 4 kali. Dalam ciphertext ini, saya menyimpulkan bahwa 601 adalah kode untuk karakter ‘d’.
Ingat bahwa untuk setiap penambahan satu karakter plaintext membuat ciphertext bertambah 4 digit. Ternyata 4 digit tersebut adalah satu digit apapun diikuti dengan 3 digit kode karakter. Chosen plaintext dalam contoh sebelumnya saya pecah-pecah menjadi kelompok 4 digit dipisahkan dengan karakter ‘#’ dan dari 4 digit tersebut saya pecah dua menjadi 1 digit dan 3 digit dengan karakter ‘-’.
Plaintext
Ciphertext
Kode
d
9-225#4-325
325 = ‘d’
dd
8-312#1-412#1-412
412 = ‘d’
ddd
6-180#1-280#1-280#7-280
280 = ‘d’
dddd
1-501#3-601#6-601#8-601#7-601
601 = ‘d’
Oke sampai disini saya sudah mendapatkan titik terang. Saya sudah mengetahui komposisi dan posisi tiap karakter pada plaintext ketika dipetakan pada ciphertext. Tapi masih ada yang belum jelas, dalam contoh tersebut kode untuk krakter ‘d’ ternyata berbeda-beda, pada contoh pertama kodenya adalah 325, pada contoh lain kode untuk ‘d’ adalah 412, 280 dan 601.
Kini saya harus mengetahui bagaimana hubungan antara kode yang berurutan, untuk itu saya memilih plaintext “abcd1234″ dengan ciphertext 433034273428242944308379538023819382. Mari kita pecah ciphertext tersebut menjadi kelompok 4 digit seperti tabel di atas.
4-330#3-427#3-428#2-429#4-430#8-379#5-380#2-381#9-382
Dari pengelompokan tersebut kita bisa simpulkan bahwa:
427 = ‘a’, 428 = ‘b’, 429 = ‘c’, 430 = ‘d’, 379 = ’1′, 380 = ’2′, 381=’3′, 382=’4′
Perhatikan bahwa kode-kode tersebut sengaja saya pilih berurut ‘a’->’b'->’c'->’d’ dan ternyata ciphertextnya pun ikut berurut 427->428->429->430. Begitu juga untuk ’1′->’2′->’3′->’4′, ciphertextnya juga berurut 379->380->381->382. Saya mencurigai bahwa enkripsi ini memakai kode ASCII karena memang kode ASCII untuk ‘abcd’ dan ’1234′ berurutan.Kode ASCII untuk  ‘a’=97, ‘b’=98,’c'=99,’d'=100,’1′=49,’2′=50,’3′=51,’4′=52.
Terlihat ada jarak yang cukup jauh antara kode ASCII dan kode pada ciphertext. Contohnya ‘a’ dengan ASCII 97, dalam ciphertext dikodekan dengan 427, selisihnya 427-97 adalah 330. Begitu juga dengan ’1′ dengan ASCII 49, dalam ciphertext dikodekan menjadi 379, dengan selisih 379-49 adalah 330. Ternyata kalau dilihat semua kode pada ciphertext juga berjarak 330 dengan kode ASCII. Pertanyaannya, darimana angka 330 ini muncul?
Mari kita lihat sekali lagi ciphertext dari ‘abcd1234′ (setelah dikelompokkan 4 digit):
4-330#3-427#3-428#2-429#4-430#8-379#5-380#2-381#9-382
Adakah angka 330 dalam ciphertext tersebut? Aha, ternyata ada! Ingat bahwa plaintext satu karakter, ciphertextnya adalah 8 digit, padahal tiap karakter dikodekan dalam 4 digit, jadi ada kelebihan 4 digit. Ternyata pada kelompok 4 digit pertama mengandung offset dengan kode ASCII, yaitu pada digit ke-2 hingga ke-4.
Jadi sekarang misteri enkripsi ini terpecahkan. Mari kita coba dekrip contoh ciphertext yang saya kumpulkan di awal:
  • 804881451156416021528145
Pertama kita kelompokkan menjadi kelompok 4 digit: 8-048#8-145#1-156#4-160#2-152#8-145. Kelompok 4 digit pertama 8048 menunjukkan offset yaitu 048. Kelompok 4 digit kedua, 8145 menunjukkan kode karakter pertama adalah 145, dikonversi ke kode ASCII menjadi 145-048=97. ASCII 97 ini adalah ‘a’. Jadi kita temukan karakter pertama ‘a’. Berikutnya, 156-48=108, yaitu kode untuk ‘l’. Berikutnya, 160-48=112, yaitu kode untuk ‘p’. Berikutnya 152-48=104, yaitu kode untuk ‘h’. Berikutnya 145, sama dengan karakter pertama, ‘a’. Jadi hasil dekripsinya adalah ‘alpha’.
  • 9436353935332546555225378546953924846491
Kita kelompokkan menjadi kelompok 4 digit: 9-436#3-539#3-533#2-546#5-552#2-537#8-546#9-539#2-484#6-491. Karakter pertama: 539-436=103=’g’. Karakter ke-2: 533-436=97=’a’. Karakter ke-3: 546-436=110=’n’. Karakter ke-4: 552-436=116=’t’. Karakter ke-5: 537-436=110=’e’. Karakter ke-6 sama dengan ke-3, ‘n’. Karakter ke-7 sama dengan karakter ke-1, ‘g’. Karakter ke-8: 484-436=48=’0′. Karakter ke-9: 491-436=55=’7′. Jadi hasil dekripsinya adalah ‘ganteng07′.
Pada akhirnya dengan mengetahui teknik enkripsi yang dipakai, saya berhasil mendapatkan password seseorang dengan hak administrator. Tidak lama kemudian GAME OVER, webshell uploaded :)
Kesimpulan
Pelajaran yang bisa diambil dari kasus tersebut adalah bahwa membuat algoritma kriptografi yang kuat tidaklah mudah, jangan pernah memakai enkripsi buatan sendiri, walaupun algoritmanya anda rahasiakan. Selalu gunakan algoritma enkripsi terbuka yang sudah teruji oleh para ahli.
Sedangkan untuk password, sebaiknya jangan gunakan enkripsi, tapi gunakan one-way hash function yang kuat seperti SHA1. Enkripsi tidak cocok dipakai untuk menyimpan password karena ketika terjadi compromised, maka semua password yang ada di tabel akan bisa diambil attacker dengan cara menjalankan rutin dekripsi yang pasti tersedia di salah satu file script seperti PHP pada web tersebut.
Walaupun algoritma dekripsinya anda rahasiakan, suatu saat ketika terjadi compromised, seorang attacker akan bisa melakukan dekripsi dengan membaca source code php untuk men-dekrip password. Biasanya rutin dekripsinya tidak jauh dari file php yang terkait dengan halaman login



File Dari http://blog.math.uny.ac.id

Read More..

KOMUNIKASI DATA pada OSI / TCP


OSI LAYER


Pada dasarnya, komunikasi data merupakan proses mengirimkan data dari satu komputer ke komputer yang lain. Untuk dapat mengirimkan data, pada komputer harus ditambahkan alat khusus, yang dikenal sebagai network interface (interface jaringan). Jenis interface jaringan ini bermacam-macam, bergantung pada media fisik yang digunakan untuk mentransfer data tersebut Hal lain yang perlu diperhatikan ialah, pada komputer tujuan transfer data mungkin terdapat lebih dari satu aplikasi yang menunggu datangnya data. Data yang dikirim harus sampai ke aplikasi yang tepat, pada komputer yang tepat tanpa kesalahan.

 Untuk setiap problem komunikasi data, diciptakan solusi khusus berupa aturan-aturan untuk menangani problem tersebut. Untuk menangani semua masalah komunikasi data, keseluruhan aturan ini harus bekerja sama satu dengan lainnya. Sekumpulan aturan untuk mengatur proses pengiriman data ini disebut sebagai protocol komunikasi data. Protocol ini diimplementasikan dalam bentuk program komputer (software) yang terdapat pada komputer dan peralatan komunikasi data lainnya.

Pada tahun 1977 ISO (International Organization for Standarization) menetapkan OSI
(Open Standard Interconnection) sebagai standar bagi komunikasi data, OSI adalah sebuah standar baku dan ia hanyalah sebuah model rujukan, jika kita misalkan suatu model adalah sebuah pertanyaan, maka protokol adalah jawabannya. Suatu protokol hanya dapat menjawab satu atau beberapa pertanyaan tertentu yang spesifik atau dengan kata lain suatu protokol hanya melayani suatu lingkup wilayah yang sangat terbatas. Sebuah protokol tentu saja tidak dapat menjawab semua pertanyaan yang diajukan oleh sebuah model,akan tetapi dengan menggabungkan berbagai macam protokol dalam sebuah protokol suite (misalnya TCP/IP) kita dapat menjawab seluruh pertanyaan yang diajukan oleh model yang ada.

OSI model dibuat dengan tujuan agar komunikasi data dapat berjalan melalui langkah-langkah yang jelas, langkah-langkah ini biasa disebut dengan nama “layer” dan Model OSI terdiri dari tujuh layer dengan pembagian tugas yang jelas, ke tujuh layer itu
  1.  Aplication layer
  2.  Presentation layer
  3.  Session layer
  4.  Transport layer
  5.  Network layer
  6.  Data-Link layer
  7.  Physical layer
adapun fungsi dan pengertian dari tiap layer adalah :
7. Application adalah Layer paling tinggi dari model OSI,  seluruh layer dibawahnya bekerja untuk layer ini, tugas dari application layer adalah Berfungsi sebagai antarmuka dengan aplikasi dengan fungsionalitas jaringan, mengatur bagaimana aplikasi dapat mengakses jaringan, dan kemudian membuat pesan-pesan
kesalahan. Protokol yang berada dalam lapisan ini adalah HTTP, FTP, SMTP, NFS.

6. Presentation berfungsi untuk mentranslasikan data yang hendak ditransmisikan oleh aplikasi ke dalam format yang dapat ditransmisikan melalui jaringan. Protokol yang berada dalam level ini adalah perangkat lunak redirektor (redirector software), seperti layanan Workstation (dalam windows NT) dan juga Network shell (semacam Virtual network komputing (VNC) atau Remote Dekstop Protokol (RDP).

5. Session Berfungsi untuk mendefinisikan bagaimana koneksi dapat dibuat, dipelihara, atau dihancurkan. Selain itu, di level ini juga dilakukan resolusi nama.

4. Transport Berfungsi untuk memecah data ke dalam paket-paket data serta memberikan nomor urut ke paket-paket tersebut sehingga dapat disusun kembali pada sisi tujuan setelah diterima. Selain itu, pada level ini juga membuat sebuah tanda bahwa paket diterima dengan sukses (acknowledgement), dan mentransmisikan ulang terhadap paket-paket yang hilang di tengah jalan.

3. Network Berfungsi untuk mendefinisikan alamat-alamat IP, membuat header untuk paket-paket, dan kemudian melakukan routing melalui internetworking dengan menggunakan router dan switch layer3.

2. Data Link Befungsi untuk menentukan bagaimana bit-bit data dikelompokkan menjadi format yang disebut sebagai frame. Selain itu, pada level ini terjadi koreksi kesalahan, flow control, pengalamatan perangkat keras seperti halnya Media Access Control Address (MAC Address), dan menetukan bagaimana perangkat-perangkat jaringan seperti hub, bridge, repeater, dan switch layer2 beroperasi. Spesifikasi IEEE 802, membagi level ini menjadi dua level anak, yaitu lapisan Logical Link Control (LLC) dan lapisan Media Access Control (MAC).

1. Physical adalah Layer paling bawah dalam model OSI. Berfungsi untuk mendefinisikan media transmisi jaringan, metode pensinyalan, sinkronisasi bit, arsitektur jaringan (seperti halnya Ethernet atau Token Ring), topologi jaringan dan pengabelan. Selain itu, level ini juga mendefinisikan bagaimana Network Interface Card (NIC) dapat berinteraksi dengan media kabel atau radio.



Tanggung jawab setiap layer adalah menyediakan servis bagi layer diatasnya, layer yang berada diatas tidak perlu tahu tentang bagaimana data bisa sampai kesana atau apapun yang terjadi di layer di bawahnya. Ketuju layer tersebut disusun berdasarkan lima prinsip yang harus diikuti untuk menentukan layer dalam komunikasi, yaitu :
-        Layer dibuat jika ketika diperlukan pemisahan level yang secara teori diperlukan.
-        Masing-masing layer memiliki fungsi yang jelas.
-        Setiap fungsi dari masing-masing layer telah ditentukan agar sesuai dengan standart protokol secara internasional.
-        Batas kedua layer telah ditentukan untuk mengurangi informasi menerobos antarmuka layer.
-        Setiap layer ditentukan dengan jelas fungsinya, tetapi jumlah layer sebaiknya sekecil mungkin untuk menghindari arsitektur yang luas.


Tujuan OSI :
1. Koordinasi berbagai kegiatan.
2. Penyimpanan data.
3. Manajemen sumber dan proses.
4. Keandalan dan keamanan sistem pendukung perangkat lunak.
5. Membuat kerangka agar sistem / jaringan yang mengikutinya dapat saling berkomunikasi/ saling bertukar informasi, sehingga tidak tergantung merk dan model peralatan.
6. 3 layer pertama adalah interface antara terminal dan jaringan yang dipakai bersama, 4 layer selanjutnya adalah hubungan antara software.
7. Antar layer berlainan terdapat interface, layer yang sama terdapat protokol
Upper layers fokus pada aplikasi pengguna dan bagaimana file direpresentasikan di komputer. Upper layers berurusan dengan persoalan aplikasi dan pada umumnya diimplementasi hanya pada software.
Lower layers merupakan intisari komunikasi data melalui jaringan aktual. Lower layers mengendalikan persoalan transport data. Lapisan fisik dan lapisan data link diimplementasikan ke dalam hardware dan software. Lower layers yang lain pada umumnya hanya diimplementasikan dalam software.


Bagaimana Model OSI Bekerja
Pembentukan paket dimulai dari layer teratas model OSI.
Aplication layer megirimkan data ke presentation layer, di presentation layer data ditambahkan header dan atau tailer kemudian dikirim ke layer dibawahnya, pada layer dibawahnya pun demikian, data
ditambahkan header dan atau tailer kemudian dikirimkan ke layer dibawahnya lagi, terus demikian sampai ke physical layer. Di physical layer data dikirimkan melalui media transmisi ke host tujuan.
Di host tujuan paket data mengalir dengan arah sebaliknya, dari layer paling bawah ke layer paling atas. Protokol pada physical layer di host tujuan mengambil paket data dari media transmisi kemudian mengirimkannya ke data-link layer, data-link layer memeriksa data-link layer header yang ditambahkan host pengirim pada paket, jika host bukan yang dituju oleh paket tersebut maka paket itu akan di buang, tetapi jika host adalah yang dituju oleh paket tersebut maka paket akan dikirimkan ke network layer, proses ini terus berlanjut sampai ke application layer di host tujuan. Proses pengiriman paket dari layer ke layer ini disebut dengan “peer-layer communication”.

Read More..