పరిచయం
Cisco, BlueCoat, FireEye వంటి ప్రసిద్ధ తయారీదారుల నుండి ఆధునిక కార్పొరేట్ కంటెంట్ ఫిల్టరింగ్ సిస్టమ్లు వాటి మరింత శక్తివంతమైన ప్రతిరూపాలతో చాలా సాధారణమైనవి - DPI వ్యవస్థలు, ఇవి జాతీయ స్థాయిలో చురుకుగా అమలు చేయబడుతున్నాయి. ఇన్కమింగ్ మరియు అవుట్గోయింగ్ ఇంటర్నెట్ ట్రాఫిక్ను తనిఖీ చేయడం మరియు నలుపు/తెలుపు జాబితాల ఆధారంగా, ఇంటర్నెట్ కనెక్షన్ను నిషేధించే నిర్ణయం తీసుకోవడం రెండింటి పని యొక్క సారాంశం. మరియు ఇద్దరూ తమ పని యొక్క ప్రాథమిక విషయాలలో ఒకే విధమైన సూత్రాలపై ఆధారపడతారు కాబట్టి, వాటిని తప్పించుకునే పద్ధతులు కూడా చాలా ఉమ్మడిగా ఉంటాయి.
DPI మరియు కార్పొరేట్ సిస్టమ్లను చాలా సమర్థవంతంగా దాటవేయడానికి మిమ్మల్ని అనుమతించే సాంకేతికతల్లో ఒకటి డొమైన్-ఫ్రంటింగ్ టెక్నాలజీ. దీని సారాంశం ఏమిటంటే, మనం బ్లాక్ చేయబడిన వనరుకి వెళ్తాము, మరొక దాని వెనుక దాక్కుంటాము, మంచి పేరున్న పబ్లిక్ డొమైన్, ఇది స్పష్టంగా ఏ సిస్టమ్ ద్వారా బ్లాక్ చేయబడదు, ఉదాహరణకు google.com.
ఈ సాంకేతికత గురించి ఇప్పటికే చాలా కథనాలు వ్రాయబడ్డాయి మరియు అనేక ఉదాహరణలు ఇవ్వబడ్డాయి. అయినప్పటికీ, జనాదరణ పొందిన మరియు ఇటీవల చర్చించబడిన DNS-ఓవర్-HTTPS మరియు ఎన్క్రిప్టెడ్-SNI సాంకేతికతలు, అలాగే TLS 1.3 ప్రోటోకాల్ యొక్క కొత్త వెర్షన్, డొమైన్ ఫ్రంటింగ్ కోసం మరొక ఎంపికను పరిగణించడం సాధ్యం చేస్తుంది.
సాంకేతికతను అర్థం చేసుకోవడం
మొదట, చిన్న ప్రాథమిక భావనలను నిర్వచించండి, తద్వారా ఎవరు మరియు ఎందుకు ఇవన్నీ అవసరమో అందరికీ అర్థం అవుతుంది. మేము eSNI మెకానిజం గురించి ప్రస్తావించాము, దీని ఆపరేషన్ మరింత చర్చించబడుతుంది. eSNI (ఎన్క్రిప్టెడ్ సర్వర్ నేమ్ ఇండికేషన్) మెకానిజం అనేది SNI యొక్క సురక్షిత సంస్కరణ, ఇది TLS 1.3 ప్రోటోకాల్కు మాత్రమే అందుబాటులో ఉంటుంది. ఇతర విషయాలతోపాటు, అభ్యర్థన ఏ డొమైన్కు పంపబడుతుందనే సమాచారాన్ని గుప్తీకరించడం ప్రధాన ఆలోచన.
ఇప్పుడు eSNI మెకానిజం ఆచరణలో ఎలా పనిచేస్తుందో చూద్దాం.
ఆధునిక DPI పరిష్కారం ద్వారా నిరోధించబడిన ఇంటర్నెట్ వనరు మన వద్ద ఉందని చెప్పండి (ఉదాహరణకు, ప్రసిద్ధ టొరెంట్ ట్రాకర్ rutracker.nlని తీసుకుందాం). మేము టొరెంట్ ట్రాకర్ వెబ్సైట్ను యాక్సెస్ చేయడానికి ప్రయత్నించినప్పుడు, వనరు బ్లాక్ చేయబడిందని సూచించే ప్రొవైడర్ యొక్క ప్రామాణిక స్టబ్ని మేము చూస్తాము:
RKN వెబ్సైట్లో ఈ డొమైన్ వాస్తవానికి స్టాప్ జాబితాలలో జాబితా చేయబడింది:
మీరు whoisని ప్రశ్నించినప్పుడు, క్లౌడ్ ప్రొవైడర్ క్లౌడ్ఫ్లేర్ వెనుక డొమైన్ కూడా "దాచబడింది" అని మీరు చూడవచ్చు.
కానీ RKN నుండి వచ్చిన "నిపుణుల" వలె కాకుండా, బీలైన్ నుండి మరింత సాంకేతికంగా అవగాహన ఉన్న ఉద్యోగులు (లేదా మా ప్రసిద్ధ రెగ్యులేటర్ యొక్క చేదు అనుభవం ద్వారా బోధించబడ్డారు) IP చిరునామా ద్వారా సైట్ను మూర్ఖంగా నిషేధించలేదు, కానీ స్టాప్ జాబితాకు డొమైన్ పేరును జోడించారు. అదే IP చిరునామా వెనుక ఏ ఇతర డొమైన్లు దాగి ఉన్నాయో మీరు చూస్తే, వాటిలో ఒకదాన్ని సందర్శించండి మరియు యాక్సెస్ బ్లాక్ చేయబడలేదని మీరు చూస్తే మీరు దీన్ని సులభంగా ధృవీకరించవచ్చు:
ఇది ఎలా జరుగుతుంది? అన్ని కమ్యూనికేషన్లు https ప్రోటోకాల్ ద్వారా జరుగుతాయి మరియు బీలైన్ నుండి https సర్టిఫికెట్ల ప్రత్యామ్నాయాన్ని మేము ఇంకా గమనించలేదు కాబట్టి, నా బ్రౌజర్ ఏ డొమైన్లో ఉందో ప్రొవైడర్ DPIకి ఎలా తెలుసు? అతను దివ్యదృష్టితో ఉన్నాడా లేక నన్ను అనుసరిస్తున్నారా?
వైర్షార్క్ ద్వారా ట్రాఫిక్ని చూడటం ద్వారా ఈ ప్రశ్నకు సమాధానం ఇవ్వడానికి ప్రయత్నిద్దాం
ముందుగా బ్రౌజర్ DNS ద్వారా సర్వర్ యొక్క IP చిరునామాను పొందుతుందని స్క్రీన్షాట్ చూపిస్తుంది, ఆపై గమ్యం సర్వర్తో ప్రామాణిక TCP హ్యాండ్షేక్ జరుగుతుంది, ఆపై బ్రౌజర్ సర్వర్తో SSL కనెక్షన్ని ఏర్పాటు చేయడానికి ప్రయత్నిస్తుంది. దీన్ని చేయడానికి, ఇది SSL క్లయింట్ హలో ప్యాకెట్ను పంపుతుంది, ఇది స్పష్టమైన వచనంలో సోర్స్ డొమైన్ పేరును కలిగి ఉంటుంది. కనెక్షన్ని సరిగ్గా రూట్ చేయడానికి క్లౌడ్ఫ్లేర్ ఫ్రంటెండ్ సర్వర్కి ఈ ఫీల్డ్ అవసరం. ఇక్కడే ప్రొవైడర్ DPI మమ్మల్ని పట్టుకుంటుంది, మా కనెక్షన్ను విచ్ఛిన్నం చేస్తుంది. అదే సమయంలో, మేము ప్రొవైడర్ నుండి ఎటువంటి స్టబ్ను స్వీకరించము మరియు సైట్ నిలిపివేయబడినట్లుగా లేదా పని చేయనట్లుగా మేము ప్రామాణిక బ్రౌజర్ లోపాన్ని చూస్తాము:
ఇప్పుడు సూచనలలో వ్రాసినట్లుగా, బ్రౌజర్లో eSNI మెకానిజంను ప్రారంభిద్దాం
దీన్ని చేయడానికి మేము Firefox కాన్ఫిగరేషన్ పేజీని తెరవండి about: config మరియు కింది సెట్టింగ్లను సక్రియం చేయండి:
network.trr.mode = 2;
network.trr.uri = https://mozilla.cloudflare-dns.com/dns-query
network.security.esni.enabled = true
దీని తర్వాత, క్లౌడ్ఫ్లేర్ వెబ్సైట్లో సెట్టింగ్లు సరిగ్గా పని చేస్తున్నాయో లేదో తనిఖీ చేస్తాము.
వోయిలా. మాకు ఇష్టమైన ట్రాకర్ VPN లేదా ప్రాక్సీ సర్వర్లు లేకుండా తెరవబడింది. ఏమి జరిగిందో చూడటానికి ఇప్పుడు వైర్షార్క్లోని ట్రాఫిక్ డంప్ను చూద్దాం.
ఈసారి, ssl క్లయింట్ హలో ప్యాకేజీలో డెస్టినేషన్ డొమైన్ స్పష్టంగా లేదు, బదులుగా, ప్యాకేజీలో కొత్త ఫీల్డ్ కనిపించింది - encrypted_server_name - ఇక్కడే rutracker.nl విలువ ఉంటుంది మరియు క్లౌడ్ఫ్లేర్ ఫ్రంటెండ్ సర్వర్ మాత్రమే దీన్ని డీక్రిప్ట్ చేయగలదు. ఫీల్డ్. అలా అయితే, ప్రొవైడర్ DPIకి చేతులు కడుక్కోవడం మరియు అలాంటి ట్రాఫిక్ను అనుమతించడం తప్ప వేరే మార్గం లేదు. ఎన్క్రిప్షన్తో ఇతర ఎంపికలు లేవు.
కాబట్టి, బ్రౌజర్లో సాంకేతికత ఎలా పనిచేస్తుందో మేము చూశాము. ఇప్పుడు దీన్ని మరింత నిర్దిష్టమైన మరియు ఆసక్తికరమైన విషయాలకు వర్తింపజేయడానికి ప్రయత్నిద్దాం. మరియు ముందుగా, TLS 1.3తో పని చేయడానికి eSNIని ఉపయోగించడానికి మేము అదే కర్ల్ను బోధిస్తాము మరియు అదే సమయంలో eSNI-ఆధారిత డొమైన్ ఫ్రంటింగ్ ఎలా పనిచేస్తుందో చూద్దాం.
eSNIతో డొమైన్ ఫ్రంట్
https ప్రోటోకాల్ ద్వారా కనెక్ట్ చేయడానికి కర్ల్ ప్రామాణిక openssl లైబ్రరీని ఉపయోగిస్తుంది కాబట్టి, ముందుగా మనం అక్కడ eSNI మద్దతును అందించాలి. openssl మాస్టర్ బ్రాంచ్లలో ఇంకా eSNI సపోర్ట్ లేదు, కాబట్టి మనం ఒక ప్రత్యేక openssl బ్రాంచ్ని డౌన్లోడ్ చేసి, కంపైల్ చేసి ఇన్స్టాల్ చేయాలి.
మేము GitHub నుండి రిపోజిటరీని క్లోన్ చేస్తాము మరియు యధావిధిగా కంపైల్ చేస్తాము:
$ git clone https://github.com/sftcd/openssl
$ cd openssl
$ ./config
$ make
$ cd esnistuff
$ make
తరువాత, మేము రిపోజిటరీని కర్ల్తో క్లోన్ చేస్తాము మరియు మా కంపైల్ చేసిన openssl లైబ్రరీని ఉపయోగించి దాని సంకలనాన్ని కాన్ఫిగర్ చేస్తాము:
$ cd $HOME/code
$ git clone https://github.com/niallor/curl.git curl-esni
$ cd curl-esni
$ export LD_LIBRARY_PATH=/opt/openssl
$ ./buildconf
$ LDFLAGS="-L/opt/openssl" ./configure --with-ssl=/opt/openssl --enable-esni --enable-debug
ఇక్కడ openssl ఉన్న అన్ని డైరెక్టరీలను సరిగ్గా పేర్కొనడం ముఖ్యం (మా విషయంలో, ఇది /opt/openssl/) మరియు కాన్ఫిగరేషన్ ప్రక్రియ లోపాలు లేకుండా సాగుతుందని నిర్ధారించుకోండి.
కాన్ఫిగరేషన్ విజయవంతమైతే, మేము లైన్ చూస్తాము:
హెచ్చరిక: esni ESNI ప్రారంభించబడింది కానీ ప్రయోగాత్మకంగా గుర్తు పెట్టబడింది. జాగ్రత్తగా వాడండి!
$ make
ప్యాకేజీని విజయవంతంగా రూపొందించిన తర్వాత, కర్ల్ను కాన్ఫిగర్ చేయడానికి మరియు రన్ చేయడానికి openssl నుండి ప్రత్యేక బాష్ ఫైల్ని ఉపయోగిస్తాము. సౌలభ్యం కోసం కర్ల్తో డైరెక్టరీకి కాపీ చేద్దాం:
cp /opt/openssl/esnistuff/curl-esni
మరియు వైర్షార్క్లో ఏకకాలంలో DNS మరియు TLS ప్యాకెట్లను రికార్డ్ చేస్తున్నప్పుడు క్లౌడ్ఫ్లేర్ సర్వర్కి టెస్ట్ https అభ్యర్థన చేయండి.
$ ESNI_COVER="www.hello-rkn.ru" ./curl-esni https://cloudflare.com/
సర్వర్ ప్రతిస్పందనలో, openssl మరియు curl నుండి చాలా డీబగ్గింగ్ సమాచారంతో పాటు, మేము cloudflare నుండి కోడ్ 301తో HTTP ప్రతిస్పందనను అందుకుంటాము.
HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 13:12:55 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< Cache-Control: max-age=3600
< Expires: Sun, 03 Nov 2019 14:12:55 GMT
< Location: https://www.cloudflare.com/
ఇది మా అభ్యర్థన విజయవంతంగా గమ్యస్థాన సర్వర్కు పంపిణీ చేయబడిందని, విని మరియు ప్రాసెస్ చేయబడిందని సూచిస్తుంది.
ఇప్పుడు వైర్షార్క్లోని ట్రాఫిక్ డంప్ను చూద్దాం, అనగా. ఈ సందర్భంలో ప్రొవైడర్ DPI ఏమి చూసింది.
క్లౌడ్ఫ్లేర్ సర్వర్ కోసం పబ్లిక్ eSNI కీ కోసం కర్ల్ మొదట DNS సర్వర్కి మారినట్లు చూడవచ్చు - _esni.cloudflare.comకి TXT DNS అభ్యర్థన (ప్యాకేజీ నం. 13). అప్పుడు, openssl లైబ్రరీని ఉపయోగించి, Curl క్లౌడ్ఫ్లేర్ సర్వర్కు TLS 1.3 అభ్యర్థనను పంపింది, దీనిలో SNI ఫీల్డ్ మునుపటి దశలో పొందిన పబ్లిక్ కీతో గుప్తీకరించబడింది (ప్యాకెట్ #22). కానీ, eSNI ఫీల్డ్తో పాటు, SSL-హలో ప్యాకెట్లో సాధారణ - ఓపెన్ SNIతో కూడిన ఫీల్డ్ కూడా ఉంది, దీనిని మనం ఏ క్రమంలోనైనా పేర్కొనవచ్చు (ఈ సందర్భంలో -
క్లౌడ్ఫ్లేర్ సర్వర్ల ద్వారా ప్రాసెస్ చేయబడినప్పుడు ఈ ఓపెన్ SNI ఫీల్డ్ ఏ విధంగానూ పరిగణనలోకి తీసుకోబడదు మరియు ప్రొవైడర్ DPIకి మాస్క్గా మాత్రమే పని చేస్తుంది. క్లౌడ్ఫ్లేర్ సర్వర్ మా ssl-హలో ప్యాకెట్ని అందుకుంది, eSNIని డీక్రిప్ట్ చేసింది, అక్కడ నుండి అసలు SNIని సంగ్రహించింది మరియు ఏమీ జరగనట్లుగా దాన్ని ప్రాసెస్ చేసింది (ఇది eSNIని అభివృద్ధి చేస్తున్నప్పుడు ప్రణాళిక ప్రకారం ప్రతిదీ చేసింది).
DPI దృక్కోణం నుండి ఈ సందర్భంలో క్యాచ్ చేయగల ఏకైక విషయం _esni.cloudflare.comకి ప్రాథమిక DNS అభ్యర్థన. కానీ లోపల నుండి ఈ మెకానిజం ఎలా పని చేస్తుందో చూపించడానికి మాత్రమే మేము DNS అభ్యర్థనను ఓపెన్ చేసాము.
చివరకు DPI క్రింద నుండి రగ్గును బయటకు తీయడానికి, మేము ఇప్పటికే పేర్కొన్న DNS-over-HTTPS మెకానిజంను ఉపయోగిస్తాము. చిన్న వివరణ - DOH అనేది HTTPS ద్వారా DNS అభ్యర్థనను పంపడం ద్వారా మనిషి-ఇన్-ది-మిడిల్ దాడి నుండి రక్షించడానికి మిమ్మల్ని అనుమతించే ప్రోటోకాల్.
అభ్యర్థనను మళ్లీ అమలు చేద్దాం, కానీ ఈసారి మేము పబ్లిక్ eSNI కీలను https ప్రోటోకాల్ ద్వారా స్వీకరిస్తాము, DNS కాదు:
ESNI_COVER="www.hello-rkn.ru" DOH_URL=https://mozilla.cloudflare-dns.com/dns-query ./curl-esni https://cloudflare.com/
అభ్యర్థన ట్రాఫిక్ డంప్ దిగువ స్క్రీన్షాట్లో చూపబడింది:
కర్ల్ ముందుగా Mozilla.cloudflare-dns.com సర్వర్ను DoH ప్రోటోకాల్ (సర్వర్కు https కనెక్షన్ 104.16.249.249) ద్వారా యాక్సెస్ చేసి, వాటి నుండి SNI ఎన్క్రిప్షన్ కోసం పబ్లిక్ కీల విలువలను పొందేందుకు, ఆపై గమ్యస్థానానికి చేరుకుంటుందని చూడవచ్చు. సర్వర్, డొమైన్ వెనుక దాక్కుంటోంది
పైన పేర్కొన్న DoH పరిష్కర్త mozilla.cloudflare-dns.comతో పాటు, మేము ఇతర ప్రసిద్ధ DoH సేవలను ఉపయోగించవచ్చు, ఉదాహరణకు, ప్రసిద్ధ చెడు కార్పొరేషన్ నుండి.
కింది ప్రశ్నను అమలు చేద్దాం:
ESNI_COVER="www.kremlin.ru" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/
మరియు మేము సమాధానం పొందుతాము:
< HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 14:10:22 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: __cfduid=da0144d982437e77b0b37af7d00438b1a1572790222; expires=Mon, 02-Nov-20 14:10:22 GMT; path=/; domain=.rutracker.nl; HttpOnly; Secure
< Location: https://rutracker.nl/forum/index.php
< CF-Cache-Status: DYNAMIC
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Server: cloudflare
< CF-RAY: 52feee696f42d891-CPH
ఈ సందర్భంలో, మేము బ్లాక్ చేయబడిన rutracker.nl సర్వర్ని ఉపయోగించి, DoH పరిష్కరిణి dns.google (ఇక్కడ అక్షరదోషం లేదు, ఇప్పుడు ప్రసిద్ధ కార్పొరేషన్ దాని స్వంత మొదటి-స్థాయి డొమైన్ను కలిగి ఉంది) మరియు మరొక డొమైన్తో మమ్మల్ని కవర్ చేసాము, ఇది ఖచ్చితంగా మరణం యొక్క నొప్పి కింద నిరోధించడానికి అన్ని DPIలకు నిషేధించబడింది. అందుకున్న ప్రతిస్పందన ఆధారంగా, మా అభ్యర్థన విజయవంతంగా ప్రాసెస్ చేయబడిందని మీరు అర్థం చేసుకోవచ్చు.
మేము కవర్గా ప్రసారం చేసే ఓపెన్ SNIకి ప్రొవైడర్ యొక్క DPI ప్రతిస్పందిస్తుందనే అదనపు తనిఖీగా, మేము ఇతర నిషేధిత వనరుల ముసుగులో rutracker.nlకి అభ్యర్థన చేయవచ్చు, ఉదాహరణకు, మరొక “మంచి” టొరెంట్ ట్రాకర్:
$ ESNI_COVER="rutor.info" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/
మేము సర్వర్ నుండి ప్రతిస్పందనను అందుకోము, ఎందుకంటే... మా అభ్యర్థన DPI సిస్టమ్ ద్వారా బ్లాక్ చేయబడుతుంది.
మొదటి భాగానికి సంక్షిప్త ముగింపు
కాబట్టి, మేము openssl మరియు కర్ల్ ఉపయోగించి eSNI యొక్క కార్యాచరణను ప్రదర్శించగలిగాము మరియు eSNI ఆధారంగా డొమైన్ ఫ్రంటింగ్ యొక్క ఆపరేషన్ను పరీక్షించగలిగాము. అదే విధంగా, ఇతర డొమైన్ల యొక్క "ముసుగులో" పని చేయడానికి openssl లైబ్రరీని ఉపయోగించే మనకు ఇష్టమైన సాధనాలను మనం స్వీకరించవచ్చు. మా తదుపరి కథనాలలో దీని గురించి మరిన్ని వివరాలు.
మూలం: www.habr.com