Biz proqramçılar özümüzü tez-tez debatlarda tapırıq — C++ ilə Rust, yüksək səviyyəli və aşağı səviyyəli proqramlaşdırma. Lakin əsl problem təkcə zərif sistemlər yaratmaq deyil; zərərli kodun həmişə gizləndiyi bugünkü şəbəkə dünyasında onları qoruyur. Kodunuz nə qədər qüsursuz görünsə də, potensial təhlükələrə məhəl qoymamaq fəlakətə dəvətdir.
Təhlükəsizlik boşluqlarını düzəltmək və ya növbəti yeniləməni buraxmaq kifayət deyil. Əsl döyüş sisteminiz pozulduqda - bəli, nə vaxt, yoxsa - effektiv cavab verməkdir. Bu, proaktiv müdaxilənin aşkarlanmasının həyata keçirilməsi, müdafiə mexanizmlərinin avtomatlaşdırılması və bəzən təhlükələri mənbəyində həll etmək üçün aşağı səviyyəli proqramlaşdırma ilə əllərinizi çirkləndirmək deməkdir.
Döyüş meydanı yüksək səviyyəli məntiqdən kənara çıxaraq sistemin özəyinə qədər uzanır, burada yalnız ən bacarıqlı tərtibatçılar effektiv şəkildə mübarizə apara bilər. Bu səviyyədə hücumlara qarşı durmağa hazır deyilsinizsə, dünyanın bütün təhlükəsizlik xüsusiyyətləri sizi xilas etməyəcək. Kibertəhlükəsizlikdə cavab vermək qabiliyyəti olmayan müdafiə kifayət deyil.
Rootkitlər əməliyyat sisteminin daxilində işləmək üçün nəzərdə tutulmuşdur. Onlar sistem proseslərini manipulyasiya edir, zərərli fəaliyyətləri gizlədir və proqram proqramlarını düzəldir. Lakin onlar OS işə salındıqdan sonra işə başlayırlar.
But dəstləri sizə daha çox zərbə vurur. Əməliyyat sistemi hələ işə düşməmişdən əvvəl sistemə hücum edirlər. Onlar Master Boot Record (MBR) və ya UEFI/BIOS mikroproqramını yoluxduraraq, OS bu barədə bir şey edə bilməmişdən əvvəl nəzarəti ələ keçirirlər.
İndi, yəqin ki, düşünürsünüz: “ Əgər OS guya təhlükəli C/C++/Assembly əvəzinə Rust-da kodlaşdırılıbsa, nə olacaq? ”
Burada işlər maraqlı olur. Gəlin real olaq – müasir texnologiya dünyasında biz performans və dəqiq nəzarətin tamamilə vacib olduğu mürəkkəb şəbəkələrdə bir-birinə qarışan hibrid sistemlər, şəbəkələrlə məşğul oluruq. SCADA sistemləri , HVAC nəzarətləri , real vaxt sistemləri , kənar hesablamalar , quraşdırılmış cihazları düşünün — siz fikir əldə edirsiniz. Bu mühitlərdə bir dilin nə qədər “təhlükəsiz” olduğunu iddia etməsindən asılı olmayaraq, siz hələ də bu incə dənəli nəzarət və performans üçün C/C++/Assembly-ə çox güvənirsiniz.
Sistem Rust ilə qurulmuş olsa belə, gəlin dürüst olaq – onun bir çoxu hələ də performans darboğazları, gecikmə problemləri, yaddaş məhdudiyyətləri ilə məşğul olmaq və birbaşa aparatla qarşılıqlı əlaqə yaratmaq üçün unsafe
Rust kodunun böyük hissələrindən istifadə edir. Günün sonunda, performans padşah olanda, eyni qayığa düşürsən. Rustdakı o unsafe
bloklar? Onlar C/C++/Assembly-də əldə etdiyiniz eyni zəiflikləri açır.
Reallıq belədir: avadanlıq səviyyəsində dəqiq tənzimlənmiş idarəetməyə ehtiyacınız olduqda, əməliyyat sisteminizin Rust-da və ya başqa bir şeydə kodlanmasından asılı olmayaraq, eyni sıx iplə gedirsiniz. Beləliklə, Rust bəzi qoruyucu vasitələr təklif edə bilsə də, bu aşağı səviyyəli unsafe
əməliyyatlar hələ də həssasdır. Rootkitlər və bootkitlər sizin dil seçimlərinizlə maraqlanmır - çat varsa, onlar öz yolunu tapacaqlar.
Bu rəqəmsal yırtıcılar yalnız bir sistemə yoluxmur , həm də ona sahibdirlər. Əsas odur ki, onların əksəriyyəti klassiklərdən - C, C++ və Assambleyadan istifadə etməklə qurulur. Düzdür, yüksək performanslı proqramlarınızı gücləndirən eyni dillər indiyə qədər yaradılmış ən pis rootkitlərin arxasında da dayanır.
Bir saniyə təkamül haqqında düşünün . Bu, Trias dövrünün kiçik, ətyeyən dinozavrlarından T-Reks kimi Təbaşir dövrünün qüdrətli teropod canavarlarına səyahətə bənzəyir. Erkən dinosların zirvə yırtıcılarına çevrildiyi kimi, rootkitlər də nisbətən “şirin” başlanğıclardan bugünkü dəhşətli kod behemotlarına çevrildi.
Məsələn, Hacker Defender-i götürək – bu kiçik kiber-sürünən əsas OS boşluqlarından istifadə edərək cəmi 3K kod xətti idi. Ancaq hər hansı bir yaxşı yırtıcı kimi, təkamül etdi. Bugünkü rootkitlər canavarlardır, hər biri minlərlə kod sətirindən ibarət modullara bölünərək təkcə əməliyyat sistemlərini deyil, həm də aparat səviyyəli zəiflikləri hədəfləyir. Bu silahlanma yarışıdır, hər yeni rootkit mümkün olanın sərhədlərini itələyir.
Beləliklə, bu məqalədə biz iki hekayəyə dalırıq . Birincisi? Rəsmi versiyanı Alexander Matrosov, Eugene Rodionov və Sergey Bratus tərəfindən hazırlanmış Rootkits və Bootkits kimi texnoloji resurslarda tapa bilərsiniz. Bu, demək olar ki, rootkit təkamülünün bütün incə detalları üçün əsas bələdçidir. İşinizi sizin üçün asanlaşdırmaq üçün mən aşağıda bu rootkitlərin inkişafını yekunlaşdıran kladoqramı bir araya gətirdim – hər bir filial zərərli proqramların təkmilləşdirilməsində yeni sıçrayışı təmsil edir.
Ancaq bu hekayənin başqa bir tərəfi də var - sadəcə rootkitlər yazmayan, həm də onları yaşayan və nəfəs alan birinin görünüşü. Əsas xarakterimizlə tanış olun: rootkitləri özünün uzantıları kimi görən haker — pozmaq və hökmranlıq etmək üçün diqqətlə hazırlanmış kod simfoniyası. O, sadəcə olaraq hər hansı bir haker deyil; o, əfsanədir, yalnız Kərtənkələ Sehrbaz kimi tanınan yüksək səviyyəli beyindir.
Sehrbaz kərtənkələ yuxularda danışır: Mənim şah əsərlərim
“Ah, sən hələ də buradasan. Düşündüm ki, sən, Benisio, mənim əllərimdə oynadığını başa düşməyinə nə qədər vaxt lazım olacaq? Siz kiçik Rustunuza və onun təhlükəsizlik şəbəkələrinə heyran olsanız da , mən daha çox... incə bir şey üzərində işləyirəm.”
“Zərif. Bu, ehtimal ki, zərərli proqram təminatı ilə əlaqələndirmədiyiniz bir sözdür, lakin bu, hücumun arxasındakı sənəti qiymətləndirmək üçün kiçik sistemlərinizi qorumaq üçün çox sarılmış olmağınızdır. Bəli, sənət. Sizcə mən sadəcə hakerəm? Xeyr, yox — mən memar, yaradıcıyam. İndiyə qədər öyrəndiyim hər bir rootkit xaosun kətanına çəkdiyim möhtəşəm portretin fırça vuruşu olub”.
Sehrbaz kərtənkələ davam edir:
“Bilirsiniz, hətta böyüklər - Da Vinçi, Van Qoq, Bax - hamısı özlərindən əvvəlki ustadlardan öyrəniblər. Mən? Məndə Hacker Defender və Rustock var idi. Hacker Defender mənim Houdinim idi, mənə kodu sistemlərə necə köçürməyi, faylları və prosesləri sehrli kimi yox etməmi göstərirdi. Bəs Rustok? Bu, mənim Pikasso anım idi - polimorfizm ən gözəl şəkildə, daim dəyişən, təkamül edən, hər dəfə ona baxanda şəklini dəyişən bir şəkil kimi formasını dəyişir.
“Amma bunlar? Onlar sadəcə yarada biləcəyimi bildiyim şeyə daş atırdılar. Sonra Alureon gəldi. O, sadəcə sistemdə yerləşməyib – o, əsas yüklənmə rekordunu (MBR) vuraraq, nüvəyə həkk olunub. Bu, sabit diskinizin ilk sektorudur, OS-yə hətta yükləməyə necə başlamaq lazım olduğunu izah edən hissədir. Bu cür nəzarətin nə olduğunu bilirsən, Benicio? ilahi. Bu, Raxmaninovun İkinci Konsertini ilk dəfə eşitmək kimidir. Saf gözəllik, lakin kodla həkk olunub”.
“Və yenə də razı qalmadım. ZeroAccess mənim simfoniyam idi. O, bir ordu qurdu, maşınları həmyaşıd botnetə çevirdi, hər yoluxmuş sistem xaotik şah əsərində öz rolunu oynayır. Bu, artıq yalnız bir infeksiya haqqında deyildi; şəbəkədə xaosun aparılması haqqında idi. Bu, sən çatışmırsan, Benisio. Siz Rustun harmoniyasının arxasınca qaçırsınız, əsl sənət isə dissonansda - şah əsəri doğuran xaosdadır."
“Və nəhayət LoJax və MoonBounce gəldi. Bunlar sadəcə rootkitlər deyildi - onlar zərərli proqramların ola biləcəyi sərhədləri itələyərək təkamüllər idi. UEFI-nin dərinliyinə daxil edilmiş LoJax, hətta sevdiyiniz Rustın da toxuna bilməyəcəyi səviyyədə idarə olunan sistemlər. MoonBounce bunu daha da irəli apardı, SPI flash yaddaşına dalaraq, heç bir antivirus və ya sistem silinməsinin çata bilməyəcəyi yerdə gizləndi. O, sadəcə olaraq sistemdə gizlənmirdi - o, silikona həkk olunmuş Mikelancelo freskası kimi daimi və toxunulmaz qurğunun bir hissəsinə çevrildi.
“O zaman mən əsl həqiqəti başa düşdüm: idarəetmə CPU və ya ƏS-də deyil. Əsl nəzarət aparatdadır. Mən şah əsərlərimi burada hazırladım”.
“ Kərtənkələ-Mavi və Kərtənkələ-Qırmızıya daxil olun – mənim Sistine Şapelim rootkitlər. Onların necə doğulduğunu bilirsən, Benisio? Mən sizə deyəcəm, çünki səndən üstün olan dahini anlamalısan”.
“Kərtənkələ-Mavi sizin üçün hazırlanmışdır. Siz, təhlükəsizlik zəmanətləri ilə Rustunuzla fəxr edirsiniz. Kərtənkələ-Mavi təhlükəli bloklarınız arasında rəqs etdi, çoxillikliliyi xaosa atdı, I/O sistemlərinizi pozdu – bunların hamısı diqqətinizi yayındırmaq üçün. Bu axmaq yoldaşı idi: sadə və zərif. Siz Kərtənkələ-Mavini qovmağa can atarkən, mənim əsl şah əsərim Kərtənkələ-Qırmızı artıq kök salmışdı.
“ Lakin Lizard-Red sizin CPU və ya proqram təminatınıza əhəmiyyət vermədi . Xeyr, o, birbaşa SPI fləş yaddaşına getdi, DMA kontrollerlərinizə daxil oldu və sisteminizi içəridən səssizcə yenidən yazdı. Gizli bir simfoniya kimi, görünməyən, yenidən yazılan proqram təminatında ifa edirdi, dayandırıla bilməz”.
“Bu, əsl nəzarətdir, Benisio. Siz proqram təminatını yamaqlarla məşğul olarkən, mən aparatı mənimsədim. Mənə deyin, niyə Rust üçün C++-dan imtina etdiniz? Rust... o qədər ümidverici, o qədər təhlükəsiz. Ancaq unutmayın, Benicio, əsl güc təhlükəsizlikdən gəlmir. Nəzarətdən gəlir. İndi isə bunu heç vaxt unutmayacaqsan”.
Səhnə qurulub. Ən yüksək səviyyəli C++ ustası ilə Rust-a üz tutan C++ reneqat ordusu arasında qarşıdurma LuxCity-də alovlanmaq üzrədir – və ya daha da pisi, onu qaranlığa qərq etmək. Bu paylar? Tam nəzarət - təkcə kod deyil, həm də bu metropolu canlı saxlayan infrastruktur.
Enerji ilə vızıldayan şəhər döyüş meydanına çevrilmək üzrədir. Rust-güclü müdafiəsi ilə möhkəmləndirilmiş Benicio, heç vaxt gəlmədiyi bir problemlə üzləşir - C++ ustası Kərtənkələ Sehirbazın özü tərəfindən hazırlanmış bir çağırış, bu dönük Rustaceanları geri qaytarmağa qərar verdi. İki qüvvə, iki fəlsəfə, toqquşma yolunda . Ancaq bu, sadəcə proqramlaşdırma dilləri ilə bağlı deyil – bu, sistemlərə, güclərə və bəlkə də proqramlaşdırmanın gələcəyinə nəzarət uğrunda mübarizədir, lənətə gəlsin!
Benisio gələndə o, təkcə laptopu ilə silahlanmış deyildi; yox, o, daha qiymətli bir şey daşıyırdı: Rusta sarsılmaz inamı - son beş ildə şiddətlə müdafiə etdiyi dil. Məhz Rustla birlikdə o və Rustacean mühəndislərindən ibarət komandası LuxCity SmartGrid-in nüvəsini inkişaf etdirdi. Pas onun qılıncı, qalxanı, onu C++ dəhşətlərindən xilas etməyi vəd edən yeni parlaq oyuncaq idi – bufer daşqınları, yarış şərtləri, həmişə qorxulu “Free-Free” istismarı. Pas bütün bunların cavabı idi, elə deyilmi? Gələcək, ya da o inanırdı. Axı LuxCity-nin şəbəkəsi bu guya qırılmaz təməl üzərində qurulub.
Bu, Kərtənkələ-Sehirbaz kimi tanınan Yanus idi - Benisionun köhnə dostu düşmənə çevrildi. Bir dəfə C++ dilinin sonsuz imkanlarını araşdıraraq birlikdə kod yazmışdılar. Lakin Janus Rustun sərt təhlükəsizlik şəbəkələrinə və abstraksiyalarına istehza etdi. İndi Janus, Rustda Benicio tərəfindən kodlaşdırılan ən böyük SmartGrid-in beynini və bağırsaqlarını hədəfə alaraq, şəhərin infrastrukturunu bir kukla ustası kimi idarə edərək, C++-ın xam, əhli olmayan gücündən istifadə etdi.
LuxCity-dən çox aşağıda, həyatla zümzümə edən server rəflərinin sönük parıltısında Janus öz ustad işinin açılmasına tamaşa etdi. Barmaqları sürətlə klaviatura üzərində hərəkət etdi, gözləri iti və diqqətini cəmləşdirdi, o, titrəyən ekranlarda dağılan xaosu izlədi. Onun iki ən yaxşı yaradıcılığı oyunda idi: Kərtənkələ-Qırmızı və Kərtənkələ-Mavi , hər biri müxtəlif cəbhələrdən hücum edir, lakin mükəmməl harmoniyada işləyir.
Kərtənkələ-Qırmızı artıq şəhərin ağıllı şəbəkəsinin nüvəsində idi - mükəmməl səssiz işğalçı. Bu, adi proqram təminatının zəif nöqtələrini vuran bəzi adi zərərverici proqram deyildi. Xeyr, Lizard-Red ən dərin təməlləri hədəf alan mikro proqram rootkiti idi: DMA nəzarətçiləri, SPI flash yaddaşı və kəsmə idarəçiləri . O, Rustun diqqətlə hazırlanmış təhlükəsizlik mexanizmlərinin altından sürüşərək, nəzərə çarpmadan sistemdən keçdi. Nə üçün CPU və ya yaddaş buferlərinə hücum etməkdən narahat olursunuz? Kərtənkələ-Qırmızı onları tamamilə yan keçərək, Rust zəmanətlərinin heç bir təsir göstərmədiyi proqram təminatına daxil oldu.
Janus Rustun güman edilən təhlükəsizliyinin sərhədlərini əlinin içi kimi bilirdi - onu parçalamaq üçün illər sərf etmişdi. Rust, bütün parlaqlığına baxmayaraq, aparat təbəqəsinə gəldikdə qısa müddətdə dayandı . Kərtənkələ-Qırmızı çiçəkləndiyi yerdir. Bu, sadəcə koda hücum deyildi; bu, avadanlığın özünün düşməncəsinə ələ keçirilməsi idi.
Bu vaxt, Lizard-Blue yüksək səviyyəli proqram təminatı tərəfdən təxribat törədirdi . O, birbaşa hücum etmədi, lakin xaos simfoniyasını aparan maestro kimi Rustun təhlükəli bloklarından istifadə edərək mükəmməl hiylə rolunu oynadı. O, çox iş parçacığı xidmətlərini hədəfə aldı, I/O əməliyyatlarını bükdü və Rustun performans səbəbi ilə ehtiyatla gevşetdiyi yarış şərtlərini məcbur edərək fəlakətə səbəb oldu. Bu təhlükəli zonalar Benicionun diqqətlə qurulmuş müdafiələrində aralıq qalmış qapılara bənzəyirdi və C++ dilinin keçmiş ustası olan Yanus onları necə açmaq lazım olduğunu dəqiq bilirdi. Rustun çox təhlükəsizlik modeli, Benicioya güvən verən şey, Kərtənkələ-Mavi bu zəmanətləri zəif tərəflərə çevirdiyi üçün onun süqutu oldu.
Rust davam edə bilmədi. Bir vaxtlar Benicionun Rust haqqında çox sevdiyi şey - onun sərt təhlükəsizlik şəbəkəsi - indi nəzarəti bərpa etmək qabiliyyətini boğurdu. Hər bir qoruyucu bir qəfəsə çevrildi, onun hərəkətlərini məhdudlaşdırdı, onu maye, amansız hücuma qarşı qısa olan sonsuz müdafiə yamaqlarının içində tələyə saldı.
Əsl təhlükə monitorlar arasında Kərtənkələ-Mavi rəqsi deyildi. Səthin çox altında, LuxCity-nin ağıllı şəbəkəsinin damarlarının dərinliklərində olan Lizard-Red artıq nəzarəti ələ keçirmişdi. Artıq Rustun müdafiəsinin yuxarı qatlarında oynamırdı. O, SCADA kimi kritik sistemlərə və şəhərin əsas infrastrukturuna nəzarət edən HVAC sistemlərinə sızmaq üçün mikroproqram implantlarından istifadə edərək dərin qazmışdı . Bunlar texniki vasitələrin proqram təminatı ilə qarşılaşdığı sistemlər idi - burada texniki xidmət və son nəzarət cihazlarının əksəriyyəti xüsusi proqram təminatı ilə işləyirdi, onların əksəriyyəti hələ də C və Assambleyanın mirası ilə işləyir.
DMA nəzarətçiləri və SPI fləş yaddaşı pozulub. Kərtənkələ-Qırmızı əməliyyat sisteminin altındakı aparata daxil edərək CPU-dan tamamilə yan keçdi . O, infrastrukturun can damarını hədəfləyirdi - kritik əməliyyatlara nəzarət edən SCADA sistemləri və şəhərin avadanlıqlarının qüsursuz işləməsini təmin edən HVAC sistemləri. Bu implantlar sadəcə sadə kod deyildi - onlar daimi idi, cərrahi yolla mikroproqramın içərisinə yerləşdirilir, sistemin qaydalarını içəridən yenidən yazır.
Şəhər xaosa daha da qərq olduqca və SmartGrid dağılmaq ərəfəsindəykən, Benicionun ekranında bildiriş yanıb-söndü. Janusdan idi . Benisionun ürəyi döyünürdü - indi nə olacaq? Ancaq daha çox təlaş əvəzinə, mesaj bir həyat xətti tutdu. Janus LuxCity-ni tamamilə məhv etmək üçün orada deyildi - hələ yox. O, gözlənilməz bir şeylə əlini uzatmışdı: siyahı. Hər pozulmuş xidmətin, hər bir təhlükəyə məruz qalmış prosesin və ən əsası, onları izləmək üçün kodların ətraflı təsviri.
Yanus qoruyucu yandırmışdı, amma indi o, zərərsizləşdirmə kodlarını Benisioya vermişdi . İstər satınalma aktı, istərsə də son oyunda üstünlüyünü sübut etmək üçün eqoya əsaslanan bir hərəkət olsun, fərq etməzdi, Benicio düşündü. O, indi hər qərarın üzərində C++ xəyalları ilə şəhərin həyatını kodlayırdı.
Hər bir funksiya çağırışı, quraşdırılmış montajın hər bloku fəlakətin kənarında mürəkkəb rəqs idi. Lakin təhlükəli kod monadları xatırladan konstruksiyalardan istifadə edərək müasir C++ dilinə bükülmüşdü – Benisionun Haskell ilə tanış olmadığını nəzərə alaraq, Janus onu qəbul etməyə inandırmışdı . Dəqiqələr keçdikcə monitorlardakı xaos yavaşlamağa başladı.
"İndi görürsən, elə deyilmi?" bütün tamaşanı idarə edən maestronun sakit dəqiqliyi ilə soruşdu. " Bu heç vaxt dillərlə bağlı deyildi, Benicio. Söhbət sistemin mənimsənilməsindən gedir - hər bir təbəqə, hər bir yarıq - proqram təminatından aparata, məntiqdən tutmuş riyaziyyata qədər proqramlaşdırma şəbəkəmizin mərkəzində. ”
"Mən heç vaxt LuxCity-i məhv etmək istəmədim" deyə Janus davam etdi, səsi demək olar ki, nostalji idi. “ Mən sizə göstərmək istədim ki, Rust kimi təhlükəsizlik şəbəkələrinə güvənmək sizi yalnız proqnozlaşdırıla bilən edir. Bunu özünüz də görmüsünüz — Rust öz qaydaları ilə bağlıdır. C++… C++ sizə qaydaları yaratmağa imkan verir. Hörmət etdiyim yeganə məhdudiyyətlər mücərrəd cəbr, kateqoriya nəzəriyyəsi və dominant qrafik nəzəriyyəsinin obyektivləri ilə lütf və zərifliklə müəyyən edilmiş məhdudiyyətlərdir .”
Yanus Benicioya tapmacanın son, həlledici parçasını verərək , " Budur, güzəşt edilmiş xidmətlərin son siyahısı ." Bunu bitirmək vaxtı idi, amma indi onlar birlikdə işləyirdilər - usta və tələbə, köhnə vaxtlar kimi.
İdarə otağında hava dəyişdi. Alisa və Bob gərgin olsalar da, sistemin yavaş-yavaş stabilləşməyə başladığını izləyirdilər. Elektrik yenidən şəhərin kənarına keçdi. LuxCity-nin döyünən ürəyi olan SmartGrid, nəhayət, müqavimət göstərdi.
Benisio çətin yoldan öyrənmişdi ki, heç bir dil, nə qədər “təhlükəsiz” olsa da, əsl problem qarşısında nəzarəti təmin edə bilməz. Sonda söhbət Rust və ya C++ dilini seçməklə bağlı deyildi; bu, hər ikisini mənimsəmək, əsl döyüşün kod xətlərində deyil, onları idarə edən proqramçının şüurunda və elmində olduğunu başa düşməkdən ibarət idi .
Bu mövzu ilə bağlı daha çox məqalə və xəbərlərə daxil olmaq istəyirsiniz?