SSH Tunneling adalah teknik yang wajib 
dikuasai hacker. Teknik ini sangat cocok dipakai sebagai backdoor dari  
dunia luar langsung menembus ke dalam “behind enemy lines” melewati 
semua firewall, IDS, IPS atau apapun itu di perbatasan. Dalam artikel 
ini saya juga menjelaskan bagaimana melakukan chaining tunnel, yaitu 
menyambung tunnel dengan tunnel lain.
Apa itu Tunneling?
Secara sederhana tunneling berarti 
mengirimkan data melalui koneksi lain yang sudah terbentuk. Kalau anda 
buka situs internet banking, pasti anda akan membukanya dengan URL 
berawalan “https”, yang sejatinya adalah data dalam protokol HTTP yang 
dikirimkan melalui koneksi dengan protokol SSL, atau “HTTP over SSL”, 
dalam bahasa gaulnya berarti HTTP digendong sama SSL.
SSH dan SSL adalah dua contoh tunneling 
protocol, keduanya bisa dipakai untuk menggendong data dalam protokol 
apa saja (tidak hanya http). Hanya bedanya adalah pada SSL dibutuhkan 
public key certificate dalam format X.509 yang perlu diverifikasi 
melalui Certificate Authority resmi. SSH tidak memerlukan public key 
certificate, sehingga lebih sederhana dan lebih mudah dipakai.
Protocol Encapsulation
Dalam kasus https, data dalam protokol 
HTTP di-enkapsulasi (dibungkus) dalam protokol SSL sebagai payload. 
Enkapsulasi juga terjadi dalam layer model TCP/IP, yaitu data pada layer
 yang lebih atas menjadi payload dan di-enkapsulasi dengan protokol pada
 layer di bawahnya.
Anda tentu tahu boneka lucu terbuat dari
 kayu dari Rusia bernama Matryoshka. Keunikan boneka ini adalah boneka 
yang berukuran kecil bisa dimasukkan ke dalam boneka yang lebih besar, 
dan boneka yang lebih besar juga bisa dimasukkan ke dalam boneka yang 
lebih besar lagi hingga pada akhirnya hanya ada satu boneka saja yang 
paling besar. Bila boneka yang paling besar itu dibuka, maka di dalamnya
 akan ada satu boneka yang lebih kecil, bila boneka tersebut dibuka, 
maka akan ditemukan boneka lagi yang lebih kecil, demikian seterusnya 
hingga boneka yang terkecil.
Gambar di bawah ini sangat tepat menggambarkan apa itu protocol encapsulation.
Gambar di atas menggambarkan bagaimana 
data ketika dikirim dienkapsulasi dan dikirimkan melalui protokol yang 
berada pada layer di bawahnya. Pada gambar di atas bisa dikatakan bahwa 
email message tersebut dikirimkan dalam bentuk paket SMTP over TCP over 
IP over Ethernet. Jadi pada akhirnya semua data tersebut akan terkirim 
dalam bentuk paket ethernet.
Dalam ilustrasi boneka matryoshka, pesan
 email adalah boneka matryoshka terkecil. Boneka ini dimasukkan dalam 
boneka matryoshka SMTP yang ukurannya lebih besar, kemudian boneka 
matryoshka SMTP ini dimasukkan dalam boneka matryoshka TCP, kemudian 
boneka matryoshka TCP ini dimasukkan dalam boneka matryoshka IP, dan 
akhirnya dimasukkan ke dalam boneka matryoshka ethernet yang berukuran 
paling besar.
Jadi boneka matryoshka yang diterima 
lawan biacara adalah boneka matryoshka yang terbesar. Bila boneka ini 
dibuka, di dalamnya ada boneka Matryoshka IP yang lebih kecil, dan bila 
boneka ini juga dibuka, di dalamnya ada boneka matryoshka TCP yang 
semakin kecil ukurannya. Bila boneka matryoshka TCP ini dibuka, di 
dalamnya ada boneka matryoshka SMTP yang didalamnya ada matryoshka email
 message. Email message adalah boneka matryoshka terkecil.
Port Forwarding
Port forwarding atau port mapping 
pengalihan (redirection) koneksi dari suatu IP:Port ke IP:Port yang 
lain.  Ini artinya adalah semua koneksi yang ditujukan ke IP:Port asal 
akan dialihkan ke IP:Port tujuan seolah-olah client sedang menghubungi 
IP:Port tujuan secara langsung.
Contoh: bila kita definisikan port 
forwarding 127.0.0.1:8080 dipetakan ke 192.168.10.10:80, artinya bila 
browser di arahkan ke url http://127.0.0.1:8080, maka request HTTP 
tersebut akan diteruskan ke 192.168.10.10:80. Jadi walaupun pada 
localhost (127.0.0.1) port 8080 tidak ada web server, namun web browser 
bisa membuka web pada url http://localhost:8080.
Gambar di bawah ini adalah contoh port forwarding dari web nakahara-informatics.com.
- 64.130.31.59:10004 –> 192.168.1.103:22 Artinya untuk SSH ke host 192.168.1.103, maka client harus ssh ke IP 64.130.31.59 port 10004.
- 64.130.31.59:10001 –> 192.168.1.100:22 Artinya untuk SSH ke host 192.168.1.100, maka client harus ssh ke IP 64.130.31.59 port 10001.
- 64.130.31.59:8080 –> 192.168.1.102:80 Artinya untuk mengakses halaman web di host 192.168.1.102, maka url yang harus dibuka di browser adalah http://64.130.31.59:8080
Port forwarding pada ssh, mirip 
dengan port forwarding pada gambar di atas, namun ada sedikit perbedaan.
 Pada port forward gambar di atas, titik koneksi masuk dan keluar sama, 
artinya koneksi masuk ke IP dan port tertentu, dan koneksi tersebut akan
 diforward ke tempat lain dari titik yang sama juga. Sedangkan port 
forwarding pada ssh, titik keluarnya berbeda dengan titik masuknya. Agar
 lebih jelas, silakan lihat gambar di bawah ini.
Konsep SSH Tunneling
SSH adalah protokol yang multiguna, 
selain untuk menggantikan telnet, SSH juga mendukung fitur tunneling, 
port forwarding, download/upload file (Secure FTP), SOCKS proxy dsb. 
Semua fitur tersebut dibungkus dengan enkripsi sehingga data yang lewat 
melalui protokol ini aman dari jangkauan hacker.
Dalam ssh tunneling, data yang 
dikirimkan melalui koneksi ssh akan di-enkapsulasi (dibungkus) dalam 
paket SSH seperti pada gambar di bawah ini.
Selain enkapsulasi paket, dalam ssh tunnel juga dibutuhkan port forwarding. Port forwarding dalam SSH tunnel ada 3 jenis:
- Local Port Forwarding
- Remote Port Forwarding
- Dynamic Port Forwarding
Perhatikan gambar di bawah ini untuk memahami perbedaan antara local port forwarding dan remote port forwarding.
- Pada local port forwarding, komputer yang bertindak sebagai ssh client akan menjadi titik masuk koneksi yang akan diforward dan komputer yang bertindak sebagai ssh server menjadi titik keluar. Jadi koneksi yang masuk ke titik masuk di komputer ssh client akan diforward ke tujuan dari komputer ssh server. Gambar di bawah ini ilustrasi lain dari ssh local port forwarding.
- Pada remote port forwarding, komputer yang bertindak sebagai ssh server akan menjadi titik masuk koneksi yang akan diforward dan komputer yang bertindak sebagai ssh client menjadi titik keluar. Jadi koneksi yang masuk ke titik masuk di komputer ssh server akan diforward ke tujuan dari komputer ssh client. Gambar di bawah ini ilustrasi lain dari ssh remote port forwarding.
Dalam bahasa sederhananya, disebut local
 karena dari sudut pandang ssh client, titik masuknya ada di localhost, 
dan disebut remote karena titik masuknya bukan di localhost, tapi di 
komputer ujung sana.
Static vs Dynamic Port Forwarding
Sebenarnya dynamic port forwarding  
termasuk local port forwarding juga karena pada dynamic port forwarding,
  titik masuk koneksi yang akan diforward berada di komputer yang  
berperan sebagai ssh client. Namun pada local dan remote port forwarding
  biasa (static), IP address dan port asal dan tujuan harus disetting 
dulu sebelum bisa dipakai, jadi sifatnya statis.
Gambar di atas adalah (static) local
  port forwarding biasa. Pada local port forwarding biasa (static), 
setiap pemetaan port asal dan IP:port tujuannya harus disetting satu per
 satu. Jadi terlihat pada gambar di  atas, bila ada 3 tujuan yang ingin 
dihubungi, maka 3 pemetaan port asal dan IP:port tujuan harus disetting 
semua sebelum bisa dipakai.
Pada gambar di atas terlihat di ssh 
client ada 3 port yang LISTEN (3 bulatan merah di sisi ssh client)  
untuk 3 tujuan yang berbeda. Perlu dicatat juga bahwa ketiga pemetaan 
port forwarding tersebut dilakukan di atas satu koneksi ssh yang sama 
(multiple port forwarding on single ssh conection).
Sedangkan pada dynamic (local) port  
forwarding, kita tidak perlu menentukan pemetaan port asal dan IP:tujuan
 untuk setiap tujuan. Kita hanya  perlu menentukan port  berapa yang 
akan LISTEN di localhost  (di komputer ssh  client), dan semua aplikasi 
bisa memanfaatkan  port tersebut sebagai  proxy ke tujuan manapun dengan
 protokol SOCKS (SOCKS proxy). Berbeda dengan gambar sebelumnya, pada 
dynamic port forwarding di sisi ssh client hanya ada satu port yang 
LISTEN (hanya ada satu bulatan merah).
Multiple Port Forwarding on Single SSH Connection
Walaupun jarang dipakai, namun 
sebenarnya ssh mendukung banyak port forwarding dalam satu koneksi ssh. 
Kalau kita membutuhkan 3 local port forwarding dan 4 remote port 
forwarding, kita tidak perlu membuat 7 koneksi ssh, cukup satu koneksi 
ssh saja. 
Gambar di atas memperlihatkan ilustrasi 
multi port forwarding pada satu koneksi ssh yang sama. Dalam satu 
koneksi ssh tersebut port forwarding yang dibuat adalah:
- Panah berwarna hitam paling atas adalah local port forwarding.
- Panah berwarna biru dan biru gelap di tengah adalah dynamic port forwarding.
- Panah berwarna hijau paling bawah adalah remote port forwarding.
Daripada membuat 3 koneksi ssh untuk 
masing-masing port forwarding, jauh lebih sederhana dan praktis membuat 
multi port forwarding pada satu koneksi ssh.
Membuat Local Port Forwarding
Sekarang setelah memahami konseptualnya,
 kita langsung praktek bagaimana membuat ssh tunnel dengan putty di 
Windows dan command line ssh di Linux.Command untuk membuat local port 
forwarding secara umum adalah:
ssh -L localport:servertujuan:porttujuan user@ssh_server
Contohnya adalah:
ssh -L 8888:www.kompas.com:80 admin@serverku.com
Perintah di atas akan membuat semua 
koneksi ke port 8888 di localhost, dialihkan ke www.kompas.com port 80 
melalui serverku.com. Titik masuknya adalah localhost:8888 dan titik 
keluarnya adalah serverku.com. Bila kita membuka browser ke URL 
http://localhost:8888, request HTTP tersebut akan sampai di 
www.kompas.com:80 melalui serverku.com, artinya dari sudut pandang 
www.kompas.com koneksi berasal dari serverku.com, bukan dari komputer 
yang menjalankan perintah tersebut. Dalam log web server www.kompas.com,
 IP address visitor adalah ip address serverku.com, bukan ip address 
komputer yang menjalankan perintah tersebut.
Kalau dalam windows, kita bisa gunakan 
putty.exe untuk membuat local port forwarding tunnel. Gambar di bawah 
ini adalah setting untuk forward koneksi localhost:8888 ke 
www.kompas.com:80. Caranya adalah dengan memasukkan 8888 ke dalam field 
“Source port”, dan memasukkan www.kompas.com:80 ke dalam field 
“Destination”. Setelah itu klik “Add”. Anda bisa menambahkan port 
forwarding yang lain sebanyak yang anda butuhkan dengan mengulang cara 
yang sama lalu klik “Add” lagi.
Membuat Remote Port Forwarding
Command untuk membuat remote port forwarding di Linux secara umum adalah:
ssh -R remoteport:servertujuan:porttujuan user@ssh_server
Contohnya  adalah:
ssh -R 8080:192.168.1.1:80 admin@serverku.com
Perintah di atas akan membuat setiap 
koneksi ke serverku.com:8080 akan dialihkan ke 192.168.1.1 melalui 
komputer yang menjalankan perintah tersebut. Pada log server tujuan 
(192.168.1.1:80) yang terlihat dari koneksi yang masuk bukan ip address 
serverku.com. Server 192.168.1.1:80 akan melihat koneksi berasal dari 
komputer yang menjalankan perintah di tersebut (komputer ssh client).
Kalau dengan putty caranya masukkan 9999
 ke dalam kolom “Source port”, kemudian masukkan 192.168.1.1:80 sebagai 
kolom “Destination”, lalu klik Add. Anda bisa menambahkan banyak port 
forwarding dalam satu koneksi ssh, dengan cara yang sama, lalu klik Add 
sebanyak yang anda butuhkan.
Remote port forwarding ini sangat cocok 
dipakai sebagai backdoor. Bila seorang hacker telah berhasil menyusup 
hingga “behind enemy lines”, dia bisa membuat remote port forwarding 
tunnel dari “behind enemy lines” ke server di luar milik hacker. Ini 
artinya hacker telah membuat terowongan, dengan pintu masuk di luar, dan
 pintu keluar di “behind enemy lines”. Ingat pada Remote port 
forwarding, titik/pintu masuk adalah di sisi ssh server, dan titik/pintu
 keluar di ssh sisi client. Dengan memakai terowongan ini, hacker bisa 
masuk melalui pintu di servernya sendiri yang berada di luar, dan secara
 otomatis hacker tersebut masuk ke “behind enemy lines” karena pintu 
keluar dari terowongan ini ada di “behind enemy lines”.
Chaining Tunnel
Terkadang ketika melakukan penetrasi, di
 dunia nyata keadaan tidaklah semulus dan seindah teori atau dalam lab. 
Firewall seringkali membuat kita tidak bisa bebas membuat koneksi ke 
server yang kita inginkan. Dalam situasi seperti ini kita harus 
berputar-putar melalu beberapa server, sampai kita bisa mencapai server 
target.
Perhatikan gambar di atas, target yang 
akan diserang hacker adalah server D.D.D.D port 3389, yaitu Remote 
Desktop connection, hacker ingin melakukan remote desktop komputer 
tersebut. Namun server D hanya bisa diakses oleh server C, dan server C 
hanya bisa diakses dari A. Hacker sudah menguasai penuh server A dan C, 
bagaimana caranya hacker tersebut bisa remote desktop ke D ?
Tujuan akhirnya adalah hacker ingin 
koneksi ke localhost:9999 di laptop backtracknya, akan diforward ke 
D.D.D.D:3389. Jadi nanti dia tinggal menjalankan RDP client dengan 
memasukkan localhost:9999, dan dia otomatis akan terkoneksi ke RDP di 
server D. Sebagai info tambahan, komputer A dan C adalah linux dengan 
ssh service  diaktifkan.
Mari kita coba membuat semua tunnel ini purely hanya dengan ssh.
1. Buat port forwarding localhost:9999 –> C.C.C.C:8888 via A.A.A.A.
Hacker menjalankan ssh client di 
backtracknya untuk membuat koneksi ke  ssh server A.A.A.A. Dalam koneksi
 ssh ini, dia membuat local port  forwarding 9999:C.C.C.C:8888, yang 
artinya adalah koneksi ke port 9999  di backtrack si hacker akan 
diforward ke C.C.C.C:8888 via A.A.A.A.
2. Buat port forwarding C.C.C.C:8888 –> D.D.D.D:3389 via C.C.C.C
Di komputer C, hacker membuat koneksi ssh ke localhost (ke C itu 
sendiri). Dalam koneksi ssh ke diri sendiri ini dia membuat local port 
forwarding 8888:D.D.D.D:3389. Artinya adalah koneksi ke C.C.C.C:8888 
akan diforward ke D.D.D.D:3389 (via C.C.C.C itu sendiri).Kita membuat 2 tunnel, yang pertama adalah tunnel dengan pintu masuk di backtrack hacker dan pintu keluar di A.A.A.A. Tunnel kedua adalah denngan pintu masuk dan pintu keluar di C juga.
Pada tunnel pertama, koneksi ke pintu masuk di backtrack hacker (localhost:9999), akan diforward ke C.C.C.C:8888 via A.A.A.A Sedangkan pada server C.C.C.C sudah dibuat port forwarding sehingga semua koneksi yang masuk ke C.C.C.C:8888 akan diforward menuju D.D.D.D:3389.
Jadi akhirnya nanti alurnya adalah:
localhost:9999 –> C.C.C.C:8888 –> D.D.D.D:3389
Gambar di atas menunjukkan chain tunnel 
yang dibuat. Koneksi ke localhost:9999 akan diteruskan ke C.C.C.C:888 
dan koneksi ke C.C.C.C:8888 akan diteruskan ke D.D.D.D:3389. Jadi sama 
artinya dengan koneksi ke localhost:9999 diteruskan ke D.D.D.D:3389.



.jpg) 
 

0 komentar:
Posting Komentar