Sheeko ku saabsan xirmooyinka DNS ee ka maqan taageerada farsamada Google Cloud

Laga soo bilaabo Google Blog Editor: Weligaa ma la yaabtay sida injineerada Google Cloud Technical Solutions (TSE) u maareeyaan codsiyadaada taageerada? Injineerada Taageerada Farsamada ee TSE ayaa mas'uul ka ah aqoonsiga iyo hagaajinta ilaha dhibaatooyinka laga soo sheegay isticmaale. Qaar ka mid ah dhibaatooyinkan waa kuwo fudud, laakiin mararka qaarkood waxaad la kulantaa tigidh u baahan dareenka dhowr injineernimo hal mar. Maqaalkan, mid ka mid ah shaqaalaha TSE ayaa nooga sheegi doona hal dhibaato oo aad u dhib badan oo ka timid dhaqankiisii ​​​​ dhawaa - kiiska xirmooyinka DNS maqan. Sheekadan, waxaan ku arki doonaa sida injineerada u suurtagashay in ay xaliyaan xaaladda, iyo waxa cusub oo ay barteen markii ay hagaajinayaan qaladka. Waxaan rajaynaynaa in aanay sheekadani ku baran oo kaliya wax ku saabsan bug qoto dheer, laakiin sidoo kale ku siiso aragti ku saabsan hababka gelaya tigidhka taageerada Google Cloud.

Sheeko ku saabsan xirmooyinka DNS ee ka maqan taageerada farsamada Google Cloud

Cilad-saarku waa cilmi iyo farshaxan labadaba. Dhammaantood waxay ku bilaabmaan dhisidda fikradda ku saabsan sababta habdhaqanka aan caadiga ahayn ee nidaamka, ka dib markaa waxaa lagu tijaabiyaa xoogga. Si kastaba ha ahaatee, ka hor inta aynaan samayn mala-awaal, waa in aan si cad u qeexno oo si sax ah u dejinno dhibaatada. Haddii su'aashu ay u muuqato mid aan caddayn, markaa waa inaad si taxadar leh u falanqeyso wax walba; Tani waa "farshaxanka" cilad-raadinta.

Marka la eego Google Cloud, hababka noocan oo kale ah waxay noqonayaan kuwo aad u adag, maadaama Google Cloud isku daydo sida ugu fiican si loo dammaanad qaado qarsoodinimada isticmaaleyaasheeda. Sababtaas awgeed, injineerada TSE ma helaan inay wax ka beddelaan nidaamyadaaga, ama awoodda ay u arkaan qaabaynta si ballaadhan sida isticmaalayaashu u arkaan. Sidaa darteed, si loo tijaabiyo mid kasta oo ka mid ah mala-awaalkayaga, annaga (injineerada) si dhakhso ah uma beddeli karno nidaamka.

Isticmaalayaasha qaarkood waxay aaminsan yihiin in aan hagaajin doono wax kasta sida makaanikada adeegga baabuurta, oo si fudud noogu soo dirno aqoonsiga mashiinka farsamada, halka dhab ahaantii geeddi-socodku uu u dhaco qaab wada hadal ah: ururinta macluumaadka, samaynta iyo xaqiijinta (ama beeninta) mala-awaalka, iyo, dhamaadka, dhibaatooyinka go'aanku waxay ku salaysan yihiin la xidhiidhka macmiilka.

Dhibaatada la is weydiinayo

Maanta waxaan idiin haynaa sheeko dhammaatay. Mid ka mid ah sababaha xallinta guusha leh ee kiiska la soo jeediyay ayaa ah sharraxaad aad u faahfaahsan oo sax ah oo dhibaatada ah. Hoos waxaad ka arki kartaa nuqul ka mid ah tigidhkii ugu horreeyay (lagu hagaajiyay si loo qariyo macluumaadka sirta ah):
Sheeko ku saabsan xirmooyinka DNS ee ka maqan taageerada farsamada Google Cloud
Fariintaan waxay ka kooban tahay macluumaad badan oo anaga faa'iido leh:

  • VM gaar ah oo la cayimay
  • Dhibaatada lafteeda ayaa la tilmaamay - DNS ma shaqeeyo
  • Waxaa lagu tilmaamaa halka ay dhibaatadu ka muuqato - VM iyo weel
  • Tallaabooyinka isticmaaluhu qaaday si uu u garto dhibaatada waa la tilmaamay.

Codsiga waxaa loo diwaan gashaday "P1: Saamaynta Halis ah - Adeeg aan la isticmaali karin marka wax soo saarka", taas oo macnaheedu yahay la socodka joogtada ah ee xaaladda 24/7 sida waafaqsan nidaamka "Raac Qorraxda" (wax badan ayaad ka akhriyi kartaa mudnaanta codsiyada isticmaalaha), iyada oo laga beddelayo koox taageero farsamo oo loo beddelo mid kale iyada oo wakhti kasta oo aag-wakhti ah la beddelo. Dhab ahaantii, markii ay dhibaatadu soo gaadhay kooxdayada Zurich, waxay mar hore ku soo wareegaysay caalamka. Waqtigan xaadirka ah, isticmaaluhu wuxuu qaaday tillaabooyin yareynta, laakiin wuxuu ka baqayay inay ku soo noqoto xaaladda wax soo saarka, maadaama sababta asalka ah aan weli la ogaan.

Markii uu tigidhku gaadhay Zurich, waxa aanu hore gacanta ugu haynay macluumaadka soo socda:

  • Nuxurka /etc/hosts
  • Nuxurka /etc/resolv.conf
  • gunaanad iptables-save
  • Waxaa soo ururiyay kooxda ngrep pcap file

Xogtan, waxaan diyaar u ahayn inaan bilowno "baarista" iyo marxaladda cilad-saarka.

Tallaabooyinkayaga ugu horreeya

Ugu horreyntii, waxaan hubinnay diiwaannada iyo heerka server-ka metadata waxaanan hubinnay inuu si sax ah u shaqeynayo. Adeegaha xogta badan ayaa ka jawaabaya ciwaanka IP-ga 169.254.169.254 iyo, waxyaabo kale, ayaa mas'uul ka ah xakamaynta magacyada domainka. Waxaan sidoo kale laba jeer hubinay in dab-damiska uu si sax ah ula shaqeeyo VM oo aanu xannibin baakadaha.

Waxay ahayd nooc ka mid ah dhibaato la yaab leh: jeega nmap-ka ayaa beeniyey mala-awaalkayaga ugu weyn ee ku saabsan luminta baakadaha UDP, markaa waxaan maskax ahaan la nimid dhawr ikhtiyaar oo kale iyo siyaabo lagu hubiyo iyaga:

  • Baakadaha si xul ah miyaa loo tuuray? => Hubi xeerarka iptables
  • Miyaanay aad u yarayn? QOFKA? => Hubi wax soo saarka ip a show
  • Dhibaatadu miyay saamaynaysaa baakadaha UDP oo kaliya ama TCP sidoo kale? => Kaxee dig +tcp
  • Baakadaha la qodayo ma la soo celiyay? => Kaxee tcpdump
  • libdns si sax ah ma u shaqeeyaan? => Kaxee strace si loo hubiyo gudbinta baakooyinka labada dhinac

Halkan waxaan ku go'aansanay inaan wacno isticmaalaha si uu u xalliyo dhibaatooyinka si toos ah.

Inta lagu jiro wicitaanka waxaan awoodnaa inaan hubinno dhowr waxyaalood:

  • Dhawr hubin ka dib waxaan ka saaraynaa xeerarka iptables liiska sababaha
  • Waxaan hubinaa isku xirka shabakadaha iyo miisaska dajinta, oo laba jeer-hubi in MTU-ga uu sax yahay
  • Waxaan ogaanay taas dig +tcp google.com (TCP) waxay u shaqeysaa sidii la rabay, laakiin dig google.com (UDP) ma shaqeeyo
  • Isagoo kaxaystay tcpdump wali waa shaqaynaysaa dig, waxaan ogaanay in baakadaha UDP la soo celinayo
  • Waanu kaxaynaa strace dig google.com waxaanan aragnaa sida saxda ah ee loo qodo sendmsg() ΠΈ recvms(), si kastaba ha ahaatee kan labaad waxaa hakad galay waqti gaaban

Nasiib darro, dhamaadka isbeddelku wuu yimid, waxaana nalagu qasbay inaan dhibaatada u sii qaadno aagga xiga. Codsiga, si kastaba ha ahaatee, wuxuu kiciyay xiisaha kooxdeena, saaxiibkiina wuxuu soo jeedinayaa abuurista xirmada hore ee DNS iyadoo la adeegsanayo moduleka Python xoqan.

from scapy.all import *

answer = sr1(IP(dst="169.254.169.254")/UDP(dport=53)/DNS(rd=1,qd=DNSQR(qname="google.com")),verbose=0)
print ("169.254.169.254", answer[DNS].summary())

Jajabkan waxa uu abuuraa xidhmo DNS ah oo waxa uu codsiga u soo dirayaa serfarka xogta badan.

Isticmaaluhu wuxuu maamulaa koodka, jawaabta DNS waa la soo celinayaa, codsiguna wuu helayaa, isagoo xaqiijinaya inaysan wax dhibaato ah ka jirin heerka shabakadda.

Ka dib "safarka aduunka oo dhan," codsigu wuxuu ku soo noqdaa kooxdayada, waxaanan si buuxda ugu wareejinayaa naftayda, anigoo u maleynaya inay ku haboonaan doonto isticmaalaha haddii codsigu joojiyo wareegitaanka meel ilaa meel.

Dhanka kale, isticmaaluhu wuxuu si naxariis leh u aqbalay inuu bixiyo sawirka nidaamka. Tani waa war aad u wanaagsan: awoodda lagu tijaabiyo nidaamka lafteedu waxay ka dhigaysaa cilad-baadhis aad u dhakhso badan, sababtoo ah mar dambe ma waydiisanayso isticmaalaha inuu amarro bixiyo, ii soo diro natiijooyinka oo aan falanqeeyo, wax walbana waan samayn karaa naftayda!

Asxaabtaydu waxay bilaabeen inay wax yar iga masayraan. Qadada waxaanu ka wada hadalnaa beddelka, laakiin qofna wax fikrad ah kama haysto waxa socda. Nasiib wanaag, isticmaaluhu qudhiisu wuxuu horey u qaaday tallaabooyin uu ku yareynayo cawaaqibka mana degdegayo, markaa waxaan haysanaa waqti aan ku kala saarno dhibaatada. Oo maadaama aan haysano muuqaal, waxaan samayn karnaa imtixaan kasta oo na xiiseeya. Wayn!

Qaadashada tallaabo dib

Mid ka mid ah su'aalaha wareysiga ugu caansan ee jagooyinka injineerada nidaamyada waa: "Maxaa dhacaya markaad ping www.google.com? Su'aashu waa weyn tahay, maadaama musharraxa u baahan yahay inuu sharaxo wax walba laga bilaabo qolofka ilaa booska isticmaalaha, kernel-ka nidaamka ka dibna shabakada. Waan dhoola cadeeyaa: mararka qaarkood su'aalaha waraysigu waxay noqdaan kuwo waxtar u leh nolosha dhabta ah...

Waxaan go'aansaday inaan su'aashan HR ku dabaqo dhibaatada hadda jirta. Qiyaas ahaan, markaad isku daydo inaad go'aamiso magaca DNS, waxa soo socdaa ayaa dhacaya:

  1. Codsigu wuxuu wacaa maktabada nidaamka sida libdns
  2. libdns waxay hubisaa habaynta nidaamka ee server-ka DNS ay tahay inuu la xiriiro (jaantuska tani waa 169.254.169.254, server-ka metadata)
  3. libdns waxay isticmaashaa wicitaanada nidaamka si ay u abuuraan godka UDP (SOKET_DGRAM) oo ay u soo diraan baakadaha UDP oo wata weydiinta DNS labada dhinacba
  4. Iyada oo loo marayo interface sysctl, waxaad ku habeyn kartaa xirmada UDP ee heerka kernel
  5. Kernelku waxa uu la falgalaa qalabka si uu ugu gudbiyo xidhmooyinka shabakada iyada oo loo sii marayo is dhexgalka shabakada
  6. Hypervisor-ku wuxuu qabtaa oo u gudbiyaa xirmada serfarka xogta badan marka lala xiriiro
  7. Seerfarka metadata, sixirkiisa, wuxuu go'aamiyaa magaca DNS wuxuuna soo celiyaa jawaab isagoo isticmaalaya hab la mid ah

Sheeko ku saabsan xirmooyinka DNS ee ka maqan taageerada farsamada Google Cloud
Aan ku xasuusiyo malo awaal aan horay u soo qaadannay:

Mala-awaal: Maktabadaha jaban

  • Tijaabada 1: Ku socodsii nidaamka, hubi in qodaya wicitaanada nidaamka saxda ah
  • Natiijadu: Wicitaannada nidaamka saxda ah ayaa la yiraahdaa
  • Tijaabada 2: Isticmaalka srapy si aad u hubiso in aan go'aamin karno magacyada ka gudbaya nidaamka maktabadaha
  • Natiijadu: waan awoodnaa
  • Tijaabada 3: ku orod rpm –V xirmada libdns iyo faylalka maktabadda md5sum
  • Natiijooyinka: nambarka maktabaddu wuxuu si buuxda ula mid yahay koodka nidaamka shaqada
  • Tijaabada 4: Ku dheji sawirka nidaamka xididka isticmaalaha VM la'aanteed habdhaqankan, socodsii chroot, arag haddii DNS uu shaqeeyo
  • Natiijadu: DNS wuxuu u shaqeeyaa si sax ah

Gabagabo ku salaysan imtixaanada: dhibku maaha maktabadaha

Mala-awaal: Waxaa jira qalad ka jira goobaha DNS

  • Tijaabada 1: hubi tcpdump oo arag haddii baakadaha DNS la soo diro oo si sax ah loo soo celiyo ka dib markaad ordo dig
  • Natiijada: baakadaha si sax ah ayaa loo kala qaadaa
  • Tijaabada 2: laba jeer hubi server-ka /etc/nsswitch.conf ΠΈ /etc/resolv.conf
  • Natiijada: wax walba waa sax

Gabagabo ku salaysan imtixaanada: dhibaatadu maaha qaabeynta DNS

Mala-awaal: xudunta ayaa dhaawacday

  • Tijaabi: rakib kernel cusub, hubi saxeexa, dib u bilow
  • Natiijadu: dabeecad la mid ah

Gabagabo ku salaysan imtixaanada: kernelku ma dhaawacmin

Mala-awaal: dabeecad aan sax ahayn ee shabakada isticmaalaha (ama shabakada hypervisor interface)

  • Tijaabada 1: Hubi dejimahaaga dab-damiska
  • Natiijadu: Firewall-ku wuxuu ka gudbiyaa xirmooyinka DNS labada martigeliyaha iyo GCP
  • Tijaabada 2: dhexda gaadiidka oo la soco saxnaanta gudbinta iyo soo celinta codsiyada DNS
  • Natiijadu: tcpdump waxay xaqiijinaysaa in martigeliyaha uu helay xidhmooyin soo celin ah

Gabagabo ku salaysan imtixaanada: dhibaatadu kuma jirto shabakada

Mala-awaal: server-ka metadata ma shaqeynayo

  • Tijaabada 1: Ka hubi diiwaanka server-ka metadata wixii cillado ah
  • Natiijadu: ma jiraan wax cillado ah oo ku jira diiwaanka
  • Tijaabada 2: Ka gudub server-ka metadata iyada oo loo marayo dig @8.8.8.8
  • Natiijadu: Xalintu waa jabtay iyada oo aan la isticmaalin serfarka xogta badan

Gabagabo ku salaysan imtixaanada: dhibaatadu maaha server-ka metadata

line hoose: Waxaan tijaabinay dhammaan nidaamyada hoosaadka marka laga reebo dejinta runtime!

Quudinta gudaha Kernel Runtime Settings

Si loo habeeyo deegaanka fulinta kernel, waxaad isticmaali kartaa xulashooyinka khadka taliska (grub) ama interface sysctl. waan eegay /etc/sysctl.conf oo kaliya ka fikir, waxaan helay dhowr habayn oo caado ah. Anigoo dareemaya sidii inaan wax qabsaday, waxaan tuuray dhammaan goobaha aan network-ga ahayn ama kuwa aan tcp-da ahayn, oo aan ku haray saldhigyada buurta. net.core. Ka dib waxaan aaday meesha ogolaanshaha martida loo yahay ee VM waxaana bilaabay in aan ku dabaqo goobaha mid mid, midba midka kale, oo leh VM jabay, ilaa aan ka helayo dembiilaha:

net.core.rmem_default = 2147483647

Waa kan, qaabeynta jebinta DNS! Waxaan helay hubkii dilka. Laakiin maxay tani u dhacaysaa? Weli waxaan u baahday ujeedo.

Cabbirka baakidhka aasaasiga ah ee DNS waxa lagu habeeyey iyada oo loo marayo net.core.rmem_default. Qiimaha caadiga ah waa meel ku dhow 200KiB, laakiin haddii server-kaagu helo baakidhyo badan oo DNS ah, waxaa laga yaabaa inaad rabto inaad kordhiso cabbirka. Haddii kaydku uu buuxsamo marka baakidh cusub yimaado, tusaale ahaan sababtoo ah codsigu si degdeg ah uguma shaqaynayo, markaa waxaad bilaabi doontaa inaad lumiso xidhmooyinka. Macmiilkayagu wuxuu si sax ah u kordhiyey cabbirka kaydka sababtoo ah wuxuu ka baqay luminta xogta, tan iyo markii uu isticmaalayey codsi ururinta cabbirada iyada oo loo marayo xirmooyinka DNS. Qiimaha uu dejiyay ayaa ahaa kii ugu badnaa ee suurtogalka ah: 231-1 (haddii lagu dhigo 231, kernel-ku wuxuu soo celin doonaa "DOOD aan sax ahayn").

Isla markiiba waxaan ogaaday sababta nmap iyo scapy ay si sax ah u shaqeeyaan: waxay isticmaalayaan saldhigyo cayriin! Saldhigyada ceyriinka ah way ka duwan yihiin saldhigyada caadiga ah: waxay dhaafaan iptables, oo aan la daboolin!

Laakin waa maxay sababta "bakhaar aad u weyn" u keeno dhibaatooyin? Waxa cad in aanay u shaqayn sidii loogu talagalay.

Halkaa marka ay marayso waxaan ku soo saari karaa dhibaatada ku jirta kernels badan iyo qaybin badan. Dhibaatadu waxay mar hore ka soo muuqatay kernel 3.x oo hadda waxay sidoo kale ka soo muuqatay kernel 5.x.

Runtii, marka la bilaabayo

sysctl -w net.core.rmem_default=$((2**31-1))

DNS ayaa joojiyay shaqadii

Waxaan bilaabay raadinta qiimaha shaqada iyada oo loo marayo algorithm search binary fudud oo waxaan ogaaday in nidaamku la shaqeeyay 2147481343, laakiin lambarkani wuxuu ii ahaa tirooyin aan macno lahayn. Waxaan u soo jeediyay macmiilka inuu isku dayo lambarkan, wuxuuna ku jawaabay in nidaamku la shaqeeyo google.com, laakiin wali wuxuu siiyay qaladka domains kale, sidaas darteed waxaan sii waday baaritaankayga.

waan rakibay saacada daadinta, qalab ay ahayd in hore loo isticmaalo: waxay muujinaysaa sida saxda ah meesha kernel-ku ku dhammaado baakidhku. Dembiilaha ayaa ahaa shaqada udp_queue_rcv_skb. Waxaan soo dejiyey ilaha kernel-ka waxaanan ku daray dhowr howlaha printk si aad ula socoto meesha saxda ah ee baqshadda. Waxaan si degdeg ah u helay xaalad sax ah if, oo si fudud u eegay in muddo ah, sababtoo ah waxay ahayd markaas wax kasta oo ugu dambeyntii isugu yimid sawir dhan: 231-1, lambar aan macno lahayn, domain aan shaqaynayn ... Waxay ahayd qayb ka mid ah koodka __udp_enqueue_schedule_skb:

if (rmem > (size + sk->sk_rcvbuf))
		goto uncharge_drop;

Fadlan ogsoonow:

  • rmem waa nooc int ah
  • size waa nooca u16 (aan saxeexin lix iyo toban-bit int) oo waxay kaydisaa cabbirka baakidhka
  • sk->sk_rcybuf waa nooc int ah oo kaydiya cabbirka kaydka kaas oo, qeexid ahaan, la mid ah qiimaha ku jira net.core.rmem_default

Goorma sk_rcvbuf Hababka 231, marka la soo koobo cabbirka baakidhka ayaa laga yaabaa inuu keeno tirada badan ee buuxdhaafay. Oo maadaama ay tahay int, qiimihiisu wuxuu noqdaa mid xun, markaa xaaladdu waxay noqotaa run markay tahay inay been noqoto (wax badan oo arrintan ku saabsan waxaad ka akhriyi kartaa at link).

Qaladka waxaa lagu sixi karaa si yar: iyadoo la tuurayo unsigned int. Waxaan dalbaday hagaajinta oo dib u bilaabay nidaamka iyo DNS ayaa mar kale shaqeeyay.

Dhadhanka guusha

Natiijooyinkaygii waxaan u gudbiyay macmiilka oo aan diray LKML balastar kernel. Waan ku faraxsanahay: qayb kasta oo ka mid ah halxiraalaha waa isku mid, waxaan si sax ah u sharxi karaa sababta aan u fiirsanay waxa aan aragnay, iyo tan ugu muhiimsan, waxaan awoodnay inaan xal u helno dhibaatada iyada oo ay ugu wacan tahay shaqadayada kooxeed!

Waxaa mudan in la aqoonsado in kiisku uu noqday mid naadir ah, nasiib wanaagna marar dhif ah ayaynu ka helno codsiyada adag ee isticmaalayaasha.

Sheeko ku saabsan xirmooyinka DNS ee ka maqan taageerada farsamada Google Cloud


Source: www.habr.com

Add a comment