際際滷
Submit Search
How to apt-get from the internal network: remote sshd with kneesocks
?
0 likes
?
3,635 views
I
inaz2
Follow
2014/09/14 すみだセキュリティ茶氏2014#3
Read less
Read more
1 of 45
Download now
Downloaded 10 times
More Related Content
How to apt-get from the internal network: remote sshd with kneesocks
1.
HOW TO APT-GET
FROM THE INTERNAL NETWORKREMOTE SSHDWITH KNEESOCKS 2014/09/14 すみだセキュリティ茶氏2014#3 @inaz2
2.
About me ?@inaz2
?Security engineer & Python programmer ?Girls Idol Freak ?ももいろテクノロジ` ?http://inaz2.hatenablog.com/ 2
3.
ONE DAY
4.
I wanted to
apt-get from sv2 LAN: 192.168.0.0/24 Internal: 10.0.0.0/24 .1 .2 .2 .3 router sv1 sv2 Internet 4
5.
I wanted to
apt-get from sv2 LAN: 192.168.0.0/24 Internal: 10.0.0.0/24 .1 .2 .2 .3 router sv1 sv2 Internet $ sudo apt-get update Err http://security.ubuntu.com precise-security Release.gpg Temporary failure resolving 'security.ubuntu.com' 5
6.
THE NEXT DAY
7.
I used HTTP
Proxy LAN: 192.168.0.0/24 Internal: 10.0.0.0/24 .1 .2 .2 .3 router sv1 sv2 HTTP Proxy Internet 7
8.
I used HTTP
Proxy LAN: 192.168.0.0/24 Internal: 10.0.0.0/24 .1 .2 .2 .3 router sv1 sv2 HTTP Proxy Internet $ sudo http_proxy=http://10.0.0.2:8080/ apt-get update Get:1 http://jp.archive.ubuntu.com precise Release.gpg [198 B] 8
9.
HTTP Proxy worked,
but ´ ?eのマシンにProxyサ`バを羨てる駅勣がある ?http_proxyh廠篳をiまないコマンドもある ?HTTP參翌のプロトコルには聞えない 9
10.
HTTP Proxy worked,
but ´ ?eのマシンにProxyサ`バを羨てる駅勣がある ?http_proxyh廠篳をiまないコマンドもある ?HTTP參翌のプロトコルには聞えない 10 喘來詰い
11.
OpenSSHDynamic Port Forwarding
?ssh-D 1080 user@sv1 ?localhost:1080 を峺協することで、sv1をSOCKS Proxyとして 聞うことができる ?HTTPに泙蕕此△△蕕罎TCP/UDPプロトコルに聞える ?OpenSSHはほとんどのサ`バで咾い討い 11
12.
OpenSSHDynamic Port Forwarding
?ssh-D 1080 user@sv1 ?localhost:1080 を峺協することで、sv1をSOCKS Proxyとして 聞うことができる ?HTTPに泙蕕此△△蕕罎TCP/UDPプロトコルに聞える ?OpenSSHはほとんどのサ`バに秘っている 喘來互い 12
13.
SOCKSIFY(1) ?DanteというSOCKS Proxyg廾に根まれるコマンド
?https://www.inet.no/dante/ ?sudoapt-get install dante-client ?ライブラリv方をフックすることで、販吭のコマンドを SOCKS Proxyに鬉気擦襪海箸できる ?このようなプログラムはProxifierと柵ばれる ?http://en.wikipedia.org/wiki/Comparison_of_proxifiers 13
14.
SOCKSIFY(1) ?DanteというSOCKS Proxyg廾に根まれるコマンド
?https://www.inet.no/dante/ ?sudoapt-get install dante-client ?ライブラリv方をフックすることで、販吭のコマンドを SOCKS Proxyに鬉気擦襪海箸できる ?このようなプログラムはProxifierと柵ばれる ?http://en.wikipedia.org/wiki/Comparison_of_proxifiers $ SOCKS_PROXY=localhost:1080 socksifycurl http://www.example.com/ 14
15.
SOCKSIFY(1) ?DanteというSOCKS Proxyg廾に根まれるコマンド
?https://www.inet.no/dante/ ?sudoapt-get install dante-client ?ライブラリv方をフックすることで、販吭のコマンドを SOCKS Proxyに鬉気擦襪海箸できる ?このようなプログラムはProxifierと柵ばれる ?http://en.wikipedia.org/wiki/Comparison_of_proxifiers $ SOCKS_PROXY=localhost:1080 socksifycurl http://www.example.com/ curl: (7) Failed to connect to 0.0.0.1: Network is unreachable 15 ( ???)
16.
OpenSSHsource code ?channels.c:
channel_decode_socks5() ?https://github.com/openssh/openssh-portable/blob/master/channels.c 16
17.
OpenSSHsource code ?channels.c:
channel_decode_socks5() ?https://github.com/openssh/openssh-portable/blob/master/channels.c UDP掲 17
18.
socksify+ openssh= FAIL
?socksifyがDNSい栽わせをProxyU喇で佩おうとする ?DNSい栽わせはUDPなので、OpenSSHはエラ`を卦す ?軸ち棒 18
19.
Force TCP DNS
request ?tsocks ?http://sourceforge.net/projects/tsocks/ ?res_init(3) をフックして、TCPい栽わせを嗤燭砲垢 ?redsocks ?http://darkk.net.ru/redsocks/ ?DNS requestをキャッチしたら、truncatedフラグ原きの鬴陲魴 し、TCPで壅業requestさせる ?どちらにしても、requestする箸翌箸DNSサ`バのアドレ スを岑っていなければならない 19
20.
Force TCP DNS
request ?tsocks ?http://sourceforge.net/projects/tsocks/ ?res_init(3) をフックして、TCPい栽わせを嗤燭砲垢 ?redsocks ?http://darkk.net.ru/redsocks/ ?DNS requestをキャッチしたら、truncatedフラグ原きの鬴陲魴 し、TCPで壅業requestさせる ?どちらにしても、requestする箸翌箸DNSサ`バのアドレ スを岑っていなければならない 20 裏虫´
21.
SOCKS5 proxy-end DNS
resolution ?SOCKS5ではDNS兆念盾QをProxy箸俳个Δ茲Δ砲任る ?requestする箸DNSサ`バのアドレスを岑らなくても寄嬋健 ?とりあえずDNSはなんとかできる ?DNS參翌のUDPは卆隼としてダメだが、}になることは富ない 21
22.
SOCKS5 proxy-end DNS
resolution ?SOCKS5ではDNS兆念盾QをProxy箸俳个Δ茲Δ砲任る ?requestする箸DNSサ`バのアドレスを岑らなくても寄嬋健 ?とりあえずDNSはなんとかできる ?DNS參翌のUDPは卆隼としてダメだが、}になることは富ない 22 いい湖じ
23.
proxychains-ng ?https://github.com/rofl0r/proxychains-ng ?proxy-end
DNS resolution ?J^原きProxy ?HTTP、SOCKS4、SOCKS5詞壓の謹粁Proxy俊A辛嬬 23
24.
proxychains-ng ?https://github.com/rofl0r/proxychains-ng ?proxy-end
DNS resolution ?J^原きProxy ?HTTP、SOCKS4、SOCKS5詞壓の謹粁Proxy俊A辛嬬 $ proxychains4 curl http://www.example.com/ [proxychains] configfile found: /etc/proxychains.conf [proxychains] preloading /usr/lib/libproxychains4.so <!doctypehtml> ... 24
25.
proxychains-ng works, but
´ ?O協ファイルのきQえが駅 ?h廠篳からO協できるようにしたい ?デバッグ竃薦を頼畠にせない ?苧幣議に峺協しない泙蝓秘竃薦に乾れないでほしい ?謹C嬬すぎてオ`バ`ヘッド寄きそう ?せっかくならオ`バ`ヘッドを恷弌晒したい ?J^も謹粁俊Aもいらない 25
26.
KNEESOCKS
27.
kneesocksgithub 27
28.
kneesocksgithub 28
29.
SOCKS5 protocol in
1 minute client proxy 1. support only NO-AUTH 2. ok, go with NO-AUTH 3. please connect to 203.0.113.1:80 4. succeeded GET / HTTP/1.1 HTTP/1.1 200 OK ´ usual payload 203.0.113.1 29
30.
Typical code for
TCP connect 30
31.
Typical code for
TCP connect 31
32.
Hooking libcfunctions ?libkneesocks.so
?個笋靴connect, getaddrinfo(+ gethostbyname) をg廾した慌嗤ラ イブラリ ?kneesocks[command] ?LD_PRELOAD=libkneesocks.so [command] するだけのシェルスク リプト ?libkneesocks.soを枠議にiませる 32
33.
Outline of libkneesocks.so
?init() ?orig_connect= dlsym(RTLD_NEXT, ^connect ̄) ?connect(s, {^203.0.113.1 ̄, 80}, ...) ?connect_proxy(s, {^203.0.113.1 ̄, 80},...) ?unset non-blocking flag ?orig_connect(s, {^127.0.0.1 ̄, 1080},...) ?establish SOCKS connection for {^203.0.113.1 ̄, 80} ?restore non-blocking flag ?return s 33
34.
Hooking DNS lookup
?ドメイン兆からIPアドレスへのQは getaddrinfo(or gethostbyname) で佩われる ?getaddrinfoをフックして、械に0.0.0.1を卦すようにする ?SOCKS4aの碧にならう ?このとき、ドメイン兆をThread Local Storageに ?0.0.0.1へのconnectが栖たら、したドメイン兆をProxyに 誘げて盾Qさせる 34
35.
Request with domain
name ?RFC 1928 -SOCKS Protocol Version 5 ?http://tools.ietf.org/html/rfc1928 35
36.
Request with domain
name ?RFC 1928 -SOCKS Protocol Version 5 ?http://tools.ietf.org/html/rfc1928 36
37.
Request with domain
name ?RFC 1928 -SOCKS Protocol Version 5 ?http://tools.ietf.org/html/rfc1928 37 ?x0fwww.example.com
38.
Typical code for
TCP connect saved_node= ^www.example.com ̄ return orig_getaddrinfo(^0.0.0.1 ̄, ...) orig_connect(s, {^127.0.0.1 ̄, 1080}, ...) if dstaddris ^0.0.0.1 ̄: establish SOCKS5 connection to saved_node(=^www.example.com ̄) return s 38
39.
Install, setup proxy
and run ?sudoapt-get install build-essential ?git clone https://github.com/inaz2/kneesocks.git ?cd kneesocks ?make ?sudomake install ?ssh-D 1080 user@sv1 -f sleep 3600 ?kneesockscurl http://www.example.com/ ?sudokneesocksapt-get update ?kneesocksgit clone https://github.com/rapid7/metasploit-framework.git ?kneesocksbundle install backgroundで1rg俊A 39
40.
Configuration via envvariables
?socks_proxy=localhost:1080 kneesocks[command] ?localhost:1080 の何蛍を笋┐襭貧はデフォルト」 ?DEBUG=1 kneesocks[command] ?淵┘薊`竃薦にデバッグログを預かせる $ DEBUG=1 kneesockscurl http://www.example.com/ [kneesocks] getaddrinfo: node=www.example.com, service=80 [kneesocks] connect: type=stream, family=2, address=0.0.0.1, port=80 [kneesocks] connect_proxy: saved_node=www.example.com <!doctypehtml> ... 40
41.
WONTFIX ?gethostbyname2, gethostbyname_r,
gethostbyname2_r ?GNUIPv6鬦罎reentrant井 ?gethostbyname狼v方はすでにobsoleteなので慧崔 ?getaddrinfoを聞わず、岷俊DNSrequestを誘げるプログラム ?dig, nslookup ?libcをstatic linkしているプログラム ?connectの念にgetaddrinfoを2BAで柵ぶプログラム ?よく聞うものであったら縮えてください 41
42.
Pros and cons
?Pros ?SSHサ`バさえ羨っていれば、あとはロ`カルで頼Y ?DNSサ`バのアドレスを岑らなくてもよい ?販吭のプログラムにy匯議なインタフェ`スで聞える ?オ`バ`ヘッド恷弌 ?Cons ?Linuxでしか聞えない ?並念にコンパイルとインスト`ルが駅勣 42
43.
Recap ?ProxyプロトコルはSしい ?Cライブラリv方のフックはSしい
?kneesocksお返X宴旋 ?仝kneesocksを堕かせる々という冱い指し容X 43
44.
References ?ssh-Linux SOCKS5
tunneling not working with udptraffic -Super User ?http://superuser.com/questions/639425/linux-socks5-tunneling-not-working-with-udp-traffic ?How Socks 5 Works ?http://samsclass.info/122/proj/how-socks5-works.html ?mallocfailure (その4) -Wataru's memo ?http://memo.wnishida.com/?date=20060730 ?スレッドロ`カルストレ`ジ(TLS) -Linuxの簍hとか??? ?http://wiki.bit- hive.com/north/pg/%A5%B9%A5%EC%A5%C3%A5%C9%A5%ED%A1%BC%A5%AB%A5% EB%A5%B9%A5%C8%A5%EC%A1%BC%A5%B8%28TLS%29 ?opensshとproxychains-ngによるSOCKS ProxyU喇のインタ`ネット俊A-ももいろテ クノロジ` ?http://inaz2.hatenablog.com/entry/2014/08/20/004106 44
45.
THANK YOU! @inaz2
Download