SOCKS

SOCKS, client-server uygulamalarının şeffafca network guvenlik duvarıservislerini kullanmasına izin veren bir internet protokoludur. SOCKS ,SOCKETS in kısaltılmış şeklidir.

Bu protokol MIPS Computer Systems sistem muduru David Koblas tarafındangeliştirilmiştir. MIPS firmasının Silicon Garphics tarafından 1992yılında devralınmasından sonra Koblas aynı yılın Usenix Securitysempozyumunda bir sunum gercekleştirerek SOCKS kullanımı herkese acıkhale getirildi. Protokol, 4. versiyonuna NEC firmasından Ying-Da Leetarafından getirildi.

SOCKS referans mimarisi ve clienti Permeo Technologies'e aittir. ( Not: Permeo Technologies , Blue Coat Systems tarafından satın alınmıştır). ( Blue Coat Systems , NEC firmasının bir turevidir ).

SOCKS , OSI modelinin 5. katmanında - (Session Layer : sunum (presentation ) ve taşıma ( transport ) katmanları arasındaki ortakatmandır.) işler.

İcerik:


* 1 SOCKS 4 protokol
o 1.1 SOCKS 4a protokol
* 2 SOCKS 5 protokol
* 3 SOCKS yazılım
* 4 Referanslar
* 5 Harici linkler

SOCKS 4 protokol

Tipik bir Socks 4 bağlanma isteği şuna benzerdir ( her rakam 1 byte olmak uzere ) :

Client'den SOCKS Server'a:

field ( Alan ) demek cevirme gereği duymadım.

* field 1: SOCKS versiyon numarası , 1 byte, bu versiyon icin 0x04 olmalıdır
* field 2: komut kodu, 1 byte:
o 0x01 = TCP/IP kur , stream bağlantı
o 0x02 = TCP/IP port binding kur
* field 3: port numarasına gore sıralandırılmış network byte, 2 bytes
* field 4: IP adresine gore sıralandırılmış network byte, 4 bytes
* field 5: kullanıcı adı (user ID), değişken uzunluğu, boş olarak sonlandırılmış (0x00)

Server'dan SOCKS client'e:

* field 1: null byte
* field 2: status, 1 byte:
o 0x5a = istek sağlandı
o 0x5b = istek reddedildi ya da gercekleştirilemedi
o 0x5c = istek gercekleştirilemedi cunku client identd' ı calıştırmıyor (ya da server tarafından ulaşılamıyor )
o 0x5d = istek gercekleştirilemedi cunku client' in identd'si istekteki kullanıcı adını (user ıd ) onaylıyamadı
* field 3: 2 arbitrary bytes, gormezden gelinmeli
* field 4: 4 arbitrary bytes, gormezden gelinmeli

Ornek Olarak:

Bu Fred'i 66.102.7.99:80 e bağlamak icin bir SOCKS 4 bağlanma isteğidir , server "OK" ile cevaplar .

* Client: 0x04 | 0x01 | 0x00 0x50 | 0x42 0x66 0x07 0x63 | 0x46 0x72 0x65 0x64 0x00
o Son alanda 'Fred' ASCII karakterlerle , takiben null byte.
* Server: 0x00 | 0x5a | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX
o 0xXX herhangi bir byte değeri olabilir. Socks 4 protokolunun belirttiği bu byte değerleri gormezden gelinmeli.

Bu noktadan itibaren SOCKS client den SOCKS servera gonderilen her data66.102.7.99 ile yer değiştirecektir ve bu işlem tersine de yapılabilir .
"connect" icin Komut alanı 0x01 ya da "bind"icin 0x02 olabilir . "bind"aktif FTP gibi protokoller icin gelen bağlantılara izin verir .

SOCKS 4a protokolu

SOCKS 4a , hedefteki hostun domain ismini cozumleyemeyen clientlere,hostun domain ismini belirlenmesine izin veren basit bir SOCKS4protokol uzantısıdır

Client, DSTIP nin ilk uc byte'ına null ve son byte'ada sıfırdan farklıbir değer atamalıdır ( Bu , x sıfırdan farklı olmak uzere 0.0.0.xşeklindeki IP adresine tekabul eder- uygun gorulmeyen hedef adres veeğerki client domain ismini cozebilirse boyle birşey asla meydanagelemez.) NULL byte'ın kullanıcı adını (USERID) sonlandırmasını takibenclient hedefteki domain ismini gondermeli ve diğer bir NULL byte ilebunu sonlandırmalıdır. Bu olay hem "connect" hem de "bind" isteklerindekullanılır.

Client'den Socks Server'a :

* field 1: SOCKS versiyon numarası, 1 byte, bu versiyon icin 0x04 olmalı.
* field 2: komut kodu, 1 byte:
o 0x01 = Bir TCP/IP stream bağlantı kurun
o 0x02 = Bir TCP/IP port binding kurun
* field 3: port numarasına gore sıralandırılmış network byte , 2 bytes
* field 4: gecersiz IP adresi uzerinde dur, 4 bytes, ilk ucu 0x00 olmalı ve sonuncusu 0x00 dan farklı olmalı.
* field 5: kullanıcı adı , değişken uzunluğu , null ile sonlandırılmış (0x00)
* field 6: iletişim kurmak istenilen hostun domain ismi, değişken uzunluğu, null ile sonlandırılmış (0x00)

Server 'dan SOCKS client'e :

* field 1: null byte
* field 2: status, 1 byte:
o 0x5a = istek sağlandı
o 0x5b = istek reddedildi yada gercekleştirilemedi
o 0x5c = istek gercekleştirilemedi cunku client identd yi calıştırmıyor (ya da server tarafından ulaşılamaz durumda)
o 0x5d = istek gercekleştirilemedi cunku clientin identd si istekteki kullanıcı adını (user ID) doğrulamadı.
* field 3: port numarasına gore sıralandırılmış network byte , 2 bytes
* field 4: IP adrese gore sıralandırılmış network byte, 4 bytes

4A protokolu kullanan bir server DSTIP yi istek paketinde kontoletmelidir. Eğerki adresi x sıfırdan farklı olmak suretiyle 0.0.0.xşeklinde gosteriyorsa, server clientin gonderdiği paketteki domainismini okumalıdır. Server domain ismini cozmeli ve yapabilirse hostistikametine bağlantıyı gercekleştirmelidir


SOCKS 5 protokolu

SOCKS 5 protokolu, daha fazla doğrulama seceneği sunan , RFC 1928 detanımlanmış bir SOCKS 4 protokolu uzantısıdır. İlk anlaşma aşağıdakigibidir:

* Client bağlar ve desteklenen doğrulama metodlarını iceren bir karşılama gonderir.
* Server birini secer (ya da eğerki metodlar kabul edilemez nitelikte ise gercekleştirilemediğine dair bir cevap gonderir)
* Birkac mesajın secilen doğrulama methoduna dayanarak client ve server arasında gecişi sağlanır.
* Client SOCKS 4 e benzer bir bağlanma isteği gonderir.
* Server SOCKS 4 e benzer olarak cevaplar.

Desteklenen Doğrulama Metodları aşağıda numaralandırılmıştır:

* 0x00 - Doğrulama yok
* 0x01 - GSSAPI [6]
* 0x02 - Kullanıcı Adı / Şifre [7]
* 0x03-0x7F - metodlar IANA tarafından atanır [8]
* 0x80-0xFE - methodlar ozel kullanım icin rezerv edilmiştir.

Clientten gelen ilk karşılama şoyledir:

* field 1: SOCKS versiyon numarası ( bu versiyon icin 0x05 olmalıdır )
* field 2: desteklenen doğrulama metodu adedi, 1 byte
* field 3: doğrulama metodları, değişken uzunluğu , desteklenen her metod icin 1 byte

Serverın secimi şoyle ifade edilir:

* field 1: SOCKS versiyon, 1 byte ( bu versiyon icin 0x05 )
* field 2: secilen doğrulama metodu, 1 byte, ya da 0xFF eğerki hic bir metod kabul edilemez durumda ise.

Sonraki doğrulama metoda dayalıdır ve RFC 1929 da tanımlanmıştır:

Clientin doğrulama isteği şoyledir:


* field 1: versiyon numarası, 1 byte ( 0x01 olmalı )
* field 2: kullanıcı adı uzunluğu , 1 byte
* field 3: kullanıcı adı
* field 4: şifre uzunluğu , 1 byte
* field 5: şifre

Doğrulamak icin Serverın cevabı şoyledir:


* field 1: versiyon, 1 byte
* field 2: status kodu, 1 byte.
o 0x00 = başarılı
o herhangi başka değer = başarısız, bağlantı kapatılmalıdır

Clientin bağlanma isteği şoyledir:

* field 1: SOCKS versiyon numarası, 1 byte ( bu versiyon icin 0x05 olmalı )
* field 2: komut kodu, 1 byte:
o 0x01 = bir TCP/IP stream bağlantısı kur
o 0x02 = bir TCP/IP port binding kur
o 0x03 = bir UDP portu birleştir
* field 3: rezerv edilmiştir, 0x00 olmalıdır
* field 4: adres şekli, 1 byte:
o 0x01 = IPv4 adresi
o 0x03 = Domain ismi
o 0x04 = IPv6 adresi
* field 5: Hedef adres :
o IPv4 adresi icin 4 byte
o Domain name icin ismi takiben isim uzunluğu 1 byte
o IPv6 adresi icin 16 byte
* field 6: network byte sıralanışıyla port numarası , 2 bytes

Server cevabı:

* field 1: SOCKS protokol versiyonu, 1 byte (bu versiyon icin 0x05)
* field 2: status, 1 byte:
o 0x00 = istek sağlandı
o 0x01 = genel başarısızlık
o 0x02 = kurallara dayanarak bağlantıya izin verilmedi
o 0x03 = network ulaşılamaz durumda
o 0x04 = host ulaşılamaz durumda
o 0x05 = bağlantı hedefteki host tarafından reddedildi
o 0x06 = TTL zaman aşımına uğradı
o 0x07 = komut desteklenmiyor / protokol hatası
o 0x08 = adres tipi desteklenmiyor
* field 3: rezerv edildi, 0x00 olmalı
* field 4: adres tipi, 1 byte:
o 0x01 = IPv4 adresi
o 0x03 = Domain name
o 0x04 = IPv6 adresi
* field 5: Hedef adres:
o IPv4 adresi icin 4 byte
o Domain name icin ismi takiben isim uzunluğu 1 byte
o IPv6 adresi icin 16 byte
* field 6ort numarasına gore sıralandırılmış network byte , 2 byte

Herhangi bir network yazılımının SOCKS vasıtasıyla harici networklerebağlanmasında adaptasyonu sağlayan Client Programları vardır.


SOCKS yazılımı

* Kernel SOCKS Bouncer ksb26 (Kernel Socks Bouncer) TCP bağlantılarınısocks 4/5 zinciri yoluyla yeniden yonlendiren (kullanıcı tanımlı hedefhostlara ) bir Linux Kernel 2.6.x Yuklenebilir Kernel Moduludur.
* SS5 Socks Server , acık kaynaklı bir SOCKS4/SOCKS5 serverıdır.
* Dante, Inferno Nettverk A/S tarafından geliştirilmiş acık kaynaklı ve ticari destekli bir SOCKS4/SOCKS5 uygulamasıdır.
* OpenSSH , SSH tunelinden uzaktan kontrollu servera SOCKS isteklerinin gonderilmesini destekler.
* WinSocks , Proxy Labs tarafından geliştirilmiş kucuk ama işlevsel bir SOCKS4/SOCKS5 serverıdır.
* SOcat Multipurpose relay (SOcket CAT): SOCKS4 ve SOCKS4a fonksiyonelliğini icerir.(Linux / Mac)
* FreeCap Socksifyer ( Windows icin ), herhangi bir uygulama kendinetwork trafiğini SOCKS veya HTTP proxy vasıtasıyla şeffafcagercekleştirebilir.
* Simple Socks Server ( Perl icin) - SSS -Simple SOCKS Server perl dilinde yazılmış ve SOCKSS v5 protokolunu tamamlar.

Referanslar

1. ^ Hummingbird SOCKS FAQ
2. ^ Darmohray, Tina. "Firewalls and fairy tales". ;LOGIN:. Vol 30, no. 1.
3. ^ http://www.socks.permeo.com (broken link as of July 2008)
4. ^ News Release from Bluecoat
5. ^
6. ^ RFC 1961
7. ^ RFC 1929
8. ^ http://www.iana.org/assignments/socks-methods

Harici Linkler

* draft-ietf-aft-socks-chap Challenge-Handshake Authentication Protocol for SOCKS V5
* RFC 3089 - SOCKS tabanlı bir IPv6/IPv4 Gecit Mekanizması
* RFC 1961 - SOCKS Version 5 icin GSS-API doğrulama metodu.
* RFC 1929 - SOCKS V5 icin kullanıcı adı / şifre doğrulaması
* RFC 1928 - SOCKS Protocol Version 5
* SOCKS: TCP proxy icin bir protokol - SOCKS Protokol Versiyon 4 (NEC)



ALINTI.
__________________