Ifihan
Ni apakan akọkọ A ti fun ni finifini apejuwe ti awọn ti paroko SNI (eSNI) siseto. Wọn fihan bi, ti o da lori rẹ, o ṣee ṣe lati yago fun wiwa nipasẹ awọn eto DPI ode oni (lilo apẹẹrẹ ti Beeline DPI ati olutọpa root RKN ti a fi ofin de), ati tun ṣawari ẹya tuntun ti iwaju agbegbe ti o da lori ẹrọ yii.
Ni apakan keji ti nkan naa, a yoo tẹsiwaju si awọn nkan ti o wulo diẹ sii ti yoo wulo fun awọn alamọja RedTeam ni iṣẹ ti o nira wọn. Ni ipari, ibi-afẹde wa kii ṣe lati ni iraye si awọn orisun dina (fun iru awọn nkan bintin a ni VPN atijọ ti o dara). O da, ọpọlọpọ awọn olupese VPN wa, bi wọn ṣe sọ, fun gbogbo itọwo, awọ ati isuna.
A yoo gbiyanju lati lo ẹrọ iwaju-ašẹ si awọn irinṣẹ RedTeam ode oni, fun apẹẹrẹ, gẹgẹbi Cobalt Strike, Empire, ati bẹbẹ lọ, ati fun wọn ni awọn agbara afikun lati farawe ati yago fun awọn eto sisẹ akoonu ode oni.
Ni akoko ikẹhin ti a ṣe imuse ẹrọ eSNI sinu ile-ikawe OpenSSL ati ni ifijišẹ lo ninu ohun elo curl faramọ. Ṣugbọn, bi wọn ti sọ, iwọ kii yoo ni itẹlọrun pẹlu adie kan kan. Nitoribẹẹ, Emi yoo fẹ lati ṣe ohun kan ti o jọra ni awọn ede giga. Ṣugbọn, laanu, wiwa iyara kọja Intanẹẹti jẹ ibanujẹ wa, nitori atilẹyin fun ẹrọ eSNI ti ni imuse ni kikun nikan ni GOLANG. Nitorinaa, a ko ni yiyan pupọ: boya a kọ sinu mimọ C tabi C ++ ni lilo ile-ikawe OpenSSL patched, tabi a lo orita GOLANG lọtọ lati CloudFlare ati gbiyanju lati gbe awọn irinṣẹ wa sibẹ. Ni opo, aṣayan miiran wa, Ayebaye diẹ sii, ṣugbọn ni akoko kanna n gba - lati ṣe atilẹyin eSNI fun Python. Lẹhinna, Python tun nlo OpenSSL lati mu https. Ṣugbọn a yoo fi aṣayan yii silẹ fun idagbasoke nipasẹ ẹlomiran, ati pe awa tikararẹ yoo ni itẹlọrun pẹlu imuse ni Golang, paapaa nitori pe Cobalt Strike olufẹ wa ni anfani ni pipe lati ṣiṣẹ pẹlu ikanni ibaraẹnisọrọ ti a ṣe nipasẹ awọn irinṣẹ ẹnikẹta (Ikanna C2 ita ita) - a yoo sọrọ nipa eyi ni opin nkan naa.
Gbiyanju Le...
Ọkan ninu awọn irinṣẹ ti a ṣe imuse ni Go ni idagbasoke wa fun pivoting sinu nẹtiwọọki - tunneler , eyiti, nipasẹ ọna, ni a rii ni bayi nipasẹ awọn irinṣẹ lati Microsoft ati Symantec bi sọfitiwia irira pupọ ti o pinnu lati fa idamu iduroṣinṣin agbaye…

Yoo jẹ nla lati lo idagbasoke iṣaaju ninu ọran yii paapaa. Ṣugbọn nibi iṣoro kekere kan dide. Otitọ ni pe ni ibẹrẹ rsockstun tumọ si lilo ikanni ibaraẹnisọrọ SSL amuṣiṣẹpọ pẹlu olupin naa. Eyi tumọ si pe asopọ ti wa ni idasilẹ ni ẹẹkan ati pe o wa fun gbogbo iye akoko iṣẹ oju eefin naa. Ati pe, bi o ti loye, ilana https ko pinnu fun ipo iṣiṣẹ yii - o ṣiṣẹ ni ipo idahun ibeere, nibiti ibeere http tuntun kọọkan wa laarin asopọ tcp tuntun kan.
Aila-nfani akọkọ ti ero yii ni pe olupin ko le gbe data lọ si alabara titi alabara yoo fi ranṣẹ ibeere http tuntun kan. Ṣugbọn, da, ọpọlọpọ awọn aṣayan wa fun ipinnu iṣoro yii - data ṣiṣanwọle nipasẹ ilana http (lẹhinna, a ṣakoso bakan lati wo awọn ifihan TV ti o fẹran ati tẹtisi orin lati awọn ọna abawọle ti n ṣiṣẹ lori https, ṣugbọn gbigbe fidio ati ohun kii ṣe nkan miiran). ju data ṣiṣan lọ). Ọkan ninu awọn imọ-ẹrọ fun ṣiṣe apẹẹrẹ iṣẹ ti asopọ TCP ti o ni kikun lori ilana HTTP jẹ imọ-ẹrọ WebSockets, pataki pataki ti eyiti o jẹ lati ṣeto asopọ nẹtiwọọki ni kikun laarin alabara ati olupin wẹẹbu.
Ni Oriire fun wa (hooray !!!), imọ-ẹrọ yii wa pẹlu aiyipada ni gbogbo awọn ero idiyele idiyele CloudFlare ati ṣiṣẹ nla ni apapo pẹlu eSNI. Eyi ni deede ohun ti a yoo lo lati kọ olutọpa wa lati lo agbegbe-iwaju ati tọju lati awọn DPI ode oni.
Diẹ diẹ nipa WebSockets
Ni akọkọ, a yoo ni ṣoki ati nirọrun ṣe alaye awọn oju opo wẹẹbu ki gbogbo eniyan ni imọran ohun ti a yoo ṣiṣẹ pẹlu.
Imọ-ẹrọ Websocket ngbanilaaye lati yipada fun igba diẹ lati asopọ http si ṣiṣanwọle iho nẹtiwọọki boṣewa laisi fifọ asopọ TCP ti iṣeto. Nigbati alabara kan ba fẹ yipada si oju opo wẹẹbu kan, o ṣeto ọpọlọpọ awọn akọle http ninu ibeere http rẹ. Awọn akọle meji ti o nilo - Asopọ: Igbesoke и Igbegasoke: websocket. O tun le fi agbara ṣe pato ẹya ilana ilana websocket (Aaya-Websockset-Ẹya: 13) ati nkan bi idamo websocket base64 (Key-WebSocket-Kọtini: DAGDJSiREI3+KjDfwxm1FA==). Olupin naa dahun fun u pẹlu koodu http 101 Awọn Ilana Yipada ati tun ṣeto awọn akọle Asopọ, Igbesoke и -aaya-WebSocket-Gba. Ilana iyipada jẹ afihan ni kedere ni sikirinifoto ni isalẹ:

Lẹhin eyi, fifi sori ẹrọ ti asopọ WebSocket le jẹ pe pipe. Eyikeyi data lati ọdọ alabara ati olupin naa yoo wa ni bayi kii ṣe pẹlu http, ṣugbọn pẹlu awọn akọle WebSocket (wọn bẹrẹ pẹlu baiti 0x82). Bayi olupin naa ko nilo lati duro fun ibeere lati ọdọ alabara lati gbe data, nitori Asopọ tcp ko baje.
Golang ni awọn ile-ikawe pupọ fun ṣiṣẹ pẹlu awọn oju opo wẹẹbu. Awọn julọ gbajumo ninu wọn ni ati boṣewa . A yoo lo igbehin, nitori ... o rọrun, kere ati, bi wọn ti sọ, ṣiṣẹ ni iyara diẹ.
Ninu koodu alabara rsockstun, a nilo lati rọpo net.dial tabi awọn ipe tls.dial pẹlu awọn ipe WebSocket ti o baamu:


A fẹ lati jẹ ki alabara jẹ apakan ti oju eefin wa ni gbogbo agbaye ati pe o lagbara lati ṣiṣẹ mejeeji nipasẹ asopọ SSL taara ati nipasẹ Ilana WebSockset. Fun eyi a yoo ṣẹda iṣẹ ti o yatọ func connectForWsSocks (okun adirẹsi, okun aṣoju) aṣiṣe {…} nipa afiwe pẹlu connectForSocks() ati pe a yoo lo lati ṣiṣẹ pẹlu awọn iho wẹẹbu ti adirẹsi olupin ti o pato nigbati alabara bẹrẹ pẹlu ws: tabi wss: (ninu ọran ti Secure WebSocket).
Fun ẹgbẹ olupin ti oju eefin, a yoo tun ṣe iṣẹ ti o yatọ fun ṣiṣẹ pẹlu awọn iho wẹẹbu. Yoo ṣẹda apẹẹrẹ ti kilasi http ati ṣeto olutọju asopọ http (iṣẹ wsHandler):

Ati pe a yoo gbe gbogbo ọgbọn ṣiṣe asopọ asopọ (aṣẹ alabara ni lilo ọrọ igbaniwọle kan, ṣeto ati ipari igba akoko yamux) ni olutọju asopọ WebSocket:

A ṣe akopọ iṣẹ akanṣe ati ṣe ifilọlẹ apakan olupin:
./rsockstun –listen ws:127.0.0.1:8080 –pass P@ssw0rdAti lẹhinna apakan alabara:
./rsockstun -connect ws:127.0.0.1:8080 –pass P@ssw0rdAti pe a ṣayẹwo iṣẹ lori agbalejo agbegbe:


Jẹ ká lọ siwaju si ase fronting
A dabi a ti ṣayẹwo jade websockets. Bayi jẹ ki a gbe taara si eSNI ati agbegbe iwaju. Gẹgẹbi a ti sọ tẹlẹ, lati ṣiṣẹ pẹlu DoH ati eSNI a nilo lati mu ẹka golang pataki kan lati ile-iṣẹ naa . A nilo ẹka kan pẹlu atilẹyin eSNI (pwu/esni).
A ṣe ẹda rẹ ni agbegbe tabi ṣe igbasilẹ ati yọkuro zip ti o baamu:
git clone -b pwu/esni https://github.com/cloudflare/tls-tris.gitLẹhinna a nilo lati daakọ itọsọna GOROOT, rọpo awọn faili ti o baamu lati ẹka ti cloned ki o ṣeto bi oluwa. Lati ṣafipamọ olugbala lati orififo yii, awọn eniyan lati CloudFlare ti pese iwe afọwọkọ pataki kan - _dev/go.sh. A kan ṣe ifilọlẹ rẹ. Iwe afọwọkọ pẹlu makefile yoo ṣe ohun gbogbo funrararẹ. Kan fun igbadun, o le wo inu makefile fun awọn alaye.
Lẹhin ṣiṣe iwe afọwọkọ naa, nigba ti o ba n ṣe akopọ iṣẹ akanṣe, a yoo nilo lati pato itọsọna agbegbe ti a pese sile nipasẹ iwe afọwọkọ bi GOROOT. Ninu ọran wa o dabi eyi:
GOROOT="/opt/tls-tris/_dev/GOROOT/linux_amd64" go build ….Nigbamii ti, a nilo lati ṣe imuse ni oju eefin iṣẹ ṣiṣe ti ibeere ati ṣiṣayẹwo awọn bọtini eSNI ti gbogbo eniyan fun agbegbe ti o fẹ. Ninu ọran wa, iwọnyi yoo jẹ awọn bọtini eSNI ti gbogbo eniyan lati ọdọ awọn olupin iwaju CloudFlare. Lati ṣe eyi, a yoo ṣẹda awọn iṣẹ mẹta:
func makeDoTQuery(dnsName string) ([]byte, error)
func parseTXTResponse(buf []byte, wantName string) (string, error)
func QueryESNIKeysForHost(hostname string) ([]byte, error)Awọn orukọ ti awọn iṣẹ, ni opo, sọ fun ara wọn. A yoo gba akoonu lati faili esni_query.go, eyiti o jẹ apakan tls-tris. Iṣẹ akọkọ ṣẹda apo-iwe nẹtiwọọki kan pẹlu ibeere kan si olupin CloudFlare DNS nipa lilo ilana DoH (DNS-over-HTTPS), keji ṣe itupalẹ awọn abajade ibeere ati gba awọn idiyele ti awọn bọtini gbangba ti agbegbe, ati pe ẹkẹta jẹ a eiyan fun igba akọkọ meji.
Nigbamii, a ṣafikun asopọ iho oju opo wẹẹbu si iṣẹ tuntun ti a ṣẹda connectForWsSocks iṣẹ ṣiṣe fun ibeere awọn bọtini eSNI fun agbegbe kan. Nibo apakan olupin ti n ṣiṣẹ, a ṣeto awọn aye TLS, ati tun ṣeto orukọ “ašẹ ibori” iro:

O yẹ ki o ṣe akiyesi nibi pe ni ibẹrẹ, ẹka tls-tris ko ṣe apẹrẹ fun lilo iwaju agbegbe. Nitorinaa, ko san ifojusi si orukọ olupin iro (aaye Orukọ olupin ti o ṣofo ni a firanṣẹ gẹgẹbi apakan ti apo-hello alabara). Lati le ṣatunṣe eyi, a yoo ni lati ṣafikun aaye FakeServerName ti o baamu si eto TlsConfig. A ko le lo awọn boṣewa ServerName aaye ti awọn be, nitori o jẹ lilo nipasẹ awọn ọna ṣiṣe tls inu ati pe ti o ba yato si ọkan atilẹba, ọwọ tls yoo pari pẹlu aṣiṣe kan. Apejuwe ti eto TlsConfig wa ninu faili naa tls/common.go - a ni lati ṣatunṣe:


Ni afikun, a yoo ni lati ṣe awọn ayipada si faili naa tls/handshake_client.golati lo aaye FakeServerName wa nigbati o ba n ṣe imudaniwo TLS kan:

Gbogbo ẹ niyẹn! O le ṣajọ iṣẹ naa ki o ṣayẹwo iṣẹ naa. Ṣugbọn ṣaaju ṣiṣe ọlọjẹ naa, o nilo lati ṣeto akọọlẹ CloudFlare kan. O dara, bawo ni MO ṣe le sọ ṣeto rẹ - kan ṣẹda akọọlẹ kan lori cloudflare ki o so agbegbe rẹ pọ si. Gbogbo awọn ẹya ti o jọmọ DoH, WebSocket ati ESNI wa ninu CloudFlare nipasẹ aiyipada. Lẹhin ti awọn igbasilẹ DNS ti ni imudojuiwọn, o le ṣayẹwo iṣẹ ṣiṣe ti agbegbe nipa ṣiṣe ibeere awọn bọtini eSNI:
dig +short txt _esni.df13tester.info 
Ti o ba rii nkan ti o jọra fun agbegbe rẹ, o tumọ si pe ohun gbogbo n ṣiṣẹ fun ọ ati pe o le tẹsiwaju si idanwo.
Ifilọlẹ Ubuntu Fún àpẹẹrẹ, VPS kan lórí DigitalOcean. Àfikún: Nínú ọ̀ràn wa, àdírẹ́sì IP VPS tí a ṣẹ̀ṣẹ̀ gbà láti ọ̀dọ̀ olùpèsè wa parí sí orí àkójọpọ̀ orúkọ Roskomnadzor. Nítorí náà, má ṣe yà ọ́ lẹ́nu bí irú nǹkan bẹ́ẹ̀ bá ṣẹlẹ̀ sí ọ. Mo ní láti lo VPN láti wọlé sí VPS mi.
A daakọ rsockstun ti a ti ṣajọpọ tẹlẹ si VPS (eyi, nipasẹ ọna, jẹ ẹwa miiran ti Golang - o le ṣajọ iṣẹ akanṣe funrararẹ ki o ṣiṣẹ lori Linux eyikeyi, n ṣakiyesi agbara bit ti eto nikan) ati ṣe ifilọlẹ apakan olupin naa:

Ati lẹhinna apakan alabara:

Gẹgẹbi a ti le rii, alabara ni aṣeyọri sopọ si olupin nipasẹ olupin iwaju iwaju CloudFlare nipa lilo oju opo wẹẹbu kan. Lati ṣayẹwo pe oju eefin n ṣiṣẹ ni deede bi eefin kan, o le ṣe ibeere curl nipasẹ awọn ibọsẹ agbegbe5, ṣii lori olupin naa:

Bayi jẹ ki a wo kini DPI rii ninu ikanni ibaraẹnisọrọ:

Ni akọkọ, tunneler, ni lilo ẹrọ DoH, kan si olupin DNS Cloudflare fun awọn bọtini eSNI fun agbegbe ibi-afẹde (awọn apo-iwe No.. 1-19), ati lẹhinna kan si olupin iwaju ati ṣeto asopọ TLS kan, ti o farapamọ lẹhin agbegbe naa. (eyi ni aiyipada iye nigbati ko si iro-ašẹ ti wa ni pato nigbati awọn ose bẹrẹ). Lati pato agbegbe iro rẹ, o gbọdọ lo paramita -fronfDomain:
![]()

Bayi nkan kan diẹ sii. Nipa aiyipada, awọn eto akọọlẹ CloudFalre ti ṣeto si SSL Flexible. Eyi tumọ si pe awọn ibeere https si awọn olupin iwaju iwaju Cloudflare lati ọdọ awọn alabara yoo firanṣẹ siwaju ni aiṣe-crypted (http) si olupin wa. Ti o ni idi ti a ṣe ifilọlẹ apakan olupin ti oju eefin ni ipo kii-ssl (-gbọ ws: 0.0.0.0), kii ṣe (-gbọ wss: 0.0.0.0).

Lati le yipada si ipo fifi ẹnọ kọ nkan ni kikun, o gbọdọ yan Fulltabi Ni kikun (muna) ti ijẹrisi gidi ba wa lori olupin naa. Lẹhin iyipada ipo, a yoo ni anfani lati gba awọn asopọ lati CloudFlare nipa lilo ilana https. Maṣe gbagbe lati ṣe ipilẹṣẹ ijẹrisi ti ara ẹni fun ẹgbẹ olupin ti oju eefin naa.

Olùkàwé tó ń béèrè ìbéèrè yóò béèrè pé: “Kí ni nípa oníbàárà tó wà lábẹ́ Windows"Ó ṣe tán, lílo pàtàkì ti ẹ̀rọ amúlétutù ni láti fi ìsopọ̀ ẹ̀yìn-ìdásílẹ̀ láti ọ̀dọ̀ àwọn ẹ̀rọ ilé-iṣẹ́ àti àwọn olupin, àwọn wọ̀nyẹn sì sábà máa ń jẹ́ Windows nígbà gbogbo. Báwo ni mo ṣe lè ṣe àkójọ ẹ̀rọ amúlétutù fún Windows, pàápàá jùlọ pẹ̀lú àkójọ TLS pàtó kan?" Nísinsìnyí, a ó ṣe àgbékalẹ̀ ẹ̀yà mìíràn tí ó fi bí Golang ṣe rọrùn tó hàn. A ń ṣe àkójọ fún Windows tààrà láti ọ̀dọ̀ Kali nípa fífi GOOS=windows paramita kún un:
GOARCH=amd64 GOROOT="/opt/tls-tris/_dev/GOROOT/linux_amd64" GOOS=windows go build -ldflags="-s -w"Tabi ẹya 32-bit:
GOARCH=386 GOROOT="/opt/tls-tris/_dev/GOROOT/linux_amd64" GOOS=windows go build -ldflags="-s -w"Gbogbo! Ati pe ko si awọn wahala diẹ sii. O ṣiṣẹ gaan!

Awọn asia olupilẹṣẹ -w ati -s nilo lati yọ idoti ti ko wulo kuro ninu faili ti o ṣiṣẹ, ti o jẹ ki o jẹ megabyte meji kere. Ni afikun, lẹhinna o le ṣe akopọ nipa lilo UPX lati dinku iwọn siwaju sii.
Dipo ti pinnu
Ninu nkan naa, ni lilo apẹẹrẹ oju eefin ti a kọ ni Golang, a ṣe afihan ni kedere lilo lilo imọ-ẹrọ iwaju-ašẹ tuntun, ti a ṣe imuse lori ẹya ti o nifẹ pupọ ti ilana TLS 1.3. Ni ọna ti o jọra, o le ṣatunṣe awọn irinṣẹ to wa tẹlẹ ti a kọ ni Golang lati ṣiṣẹ nipasẹ awọn olupin CloudFlare, fun apẹẹrẹ - olokiki C2, tabi fi agbara mu CobaltStrike Beacon lati lo iwaju-ašẹ eSNI nigbati o n ṣiṣẹ pẹlu Teamserver nipasẹ , ti a ṣe ni Golang, tabi ni boṣewa C ++ ni lilo ẹya patched ti OpenSSL, eyiti a ti sọrọ nipa ni apakan ikẹhin ti nkan naa. Ni gbogbogbo, ko si awọn opin si oju inu.
Apeere pẹlu tunneler ati CloudFlare ti gbekalẹ ni irisi ero kan ati pe o tun nira lati sọ nipa awọn ifojusọna igba pipẹ ti iru agbegbe iwaju. Ni akoko yii, CloudFlare nikan ṣe atilẹyin eSNI ati, ni imọran, ko si ohun ti o ṣe idiwọ fun wọn lati pa iru iwaju iwaju ati, fun apẹẹrẹ, fifọ awọn asopọ tls ti SNI ati eSNI ko baramu. Ni gbogbogbo, ojo iwaju yoo sọ. Ṣugbọn fun bayi, ifojusọna ti ṣiṣẹ labẹ “ideri ti kremlin.ru” dabi idanwo pupọ. Abi beko?
Koodu tunneler ti a ṣe imudojuiwọn, ati awọn faili exe ti a ṣe akojọpọ, wa ni ẹka lọtọ ti iṣẹ akanṣe lori . O dara lati kọ ọrọ kan nipa gbogbo awọn iṣoro tunneler ti o ṣeeṣe lori oju-iwe iṣẹ akanṣe lori GitHub.
orisun: www.habr.com
