XZ बैकडोर घटना: शुरुआती विश्लेषण के नतीजे
(securelist.com)- XZ Utils/liblzma बैकडोर 29 मार्च 2024 को Openwall OSS-security mailing list पर सार्वजनिक हुआ, और हमलावर का अंतिम लक्ष्य संभवतः systemd-आधारित distributions के OpenSSH server sshd में remote code execution क्षमता जोड़ना था
- infection chain XZ repository की test files और build infrastructure का उपयोग करने वाले multi-stage insertion से बना था, और
build-to-host.m4,bad-3-corrupt_lzma2.xz,good-large_compressed.lzmaके जरिए malicious object file build के दौरानliblzmaसे link हो गई - बैकडोर वाली XZ 5.6.0 और 5.6.1 कुछ प्रमुख vendors के beta और experimental builds के रूप में वितरित हुईं, और CVE-2024-3094 को severity 10 points दी गई
- binary backdoor GLIBC के IFUNC और
cpuidcall path का दुरुपयोग करके load होता है, और बाद में OpenSSL/libcrypto से जुड़े functions को hook कर संक्रमित machines के connections की निगरानी करने की कोशिश करता है - malicious code
/usr/bin/sshdके चलने और kill switch environment variable की जांच करता है, और trie-आधारित string processing, dynamic symbol resolution, औरrtdl-auditruntime patching के जरिए analysis और detection को कठिन बनाता है
घटना का सार और प्रभाव का दायरा
- 29 मार्च 2024 को Openwall OSS-security mailing list के message के जरिए XZ backdoor की खोज सार्वजनिक हुई
- XZ कई प्रमुख Linux distributions में शामिल एक compression utility है
- जोखिम का मुख्य बिंदु यह है कि backdoor वाला
liblzmaकुछ systemd-आधारित distributions में OpenSSH server processsshdसे जुड़ सकता था- Ubuntu, Debian, RedHat/Fedora Linux में OpenSSH को systemd functions इस्तेमाल करने के लिए patch किया गया है, इसलिए वे इस library पर निर्भर हैं
- Arch Linux और Gentoo को प्रभावित नहीं माना गया
- हमलावर का अंतिम लक्ष्य संभवतः ऐसा sshd remote code execution feature डालना था, जिसे बाकी लोग इस्तेमाल न कर सकें
- single malicious patch, fake package, या typosquatting package पर केंद्रित दूसरे supply chain attacks से अलग, यह घटना दुनिया भर के SSH servers को compromise करने के बेहद करीब पहुंच चुका multi-stage operation लगती है
बैकडोर कैसे डाला गया
liblzmabackdoor को build process और test files, दोनों का उपयोग करके दो स्तरों पर insert किया गया- final package बनाने वाले build infrastructure source code को
build-to-host.m4जोड़कर बदला गया - test case files के अंदर छिपे scripts और binary components को build के दौरान extract किया गया
- final package बनाने वाले build infrastructure source code को
- infection flow तीन files पर केंद्रित था
build-to-host.m4: अगले stage का script extract करने वाला build scriptbad-3-corrupt_lzma2.xz: shell script छिपी हुई test filegood-large_compressed.lzma: malicious binary object छिपी हुई test file
- extract किए गए malicious binary components compilation के दौरान normal library से link होकर Linux repositories तक पहुंच सकते थे
- प्रमुख vendors ने इस malicious component को beta और experimental builds में शामिल करके distribute किया
- XZ Utils compromise को CVE-2024-3094 assign किया गया, और severity अधिकतम 10 points है
प्रमुख timeline
- 19 जनवरी 2024: नए maintainer
jiaT75ने XZ website को GitHub Pages पर migrate किया - 15 फरवरी 2024:
build-to-host.m4को.gitignoreमें जोड़ा गया - 23 फरवरी 2024: malicious script stages वाली दो “test files” जोड़ी गईं
- 24 फरवरी 2024: XZ 5.6.0 release हुआ
- 26 फरवरी 2024:
CMakeLists.txtमें Landlock security feature में बाधा डालने वाला commit शामिल हुआ - 4 मार्च 2024: backdoor ने Valgrind से जुड़ी समस्या पैदा की
- 9 मार्च 2024: दोनों test files update की गईं, CRC function बदला गया, और Valgrind issue “fix” किया गया
- 9 मार्च 2024: XZ 5.6.1 release हुआ
- 28 मार्च 2024: bug मिला और Debian और RedHat को सूचना दी गई
- 28 मार्च 2024: Debian ने XZ 5.6.1 को 5.4.5-0.2 version पर rollback किया
- 29 मार्च 2024: OSS-security mailing list पर सार्वजनिक mail post की गई
- 29 मार्च 2024: RedHat ने पुष्टि की कि Fedora Rawhide और Fedora Linux 40 beta में backdoor वाला XZ distribute हुआ था
- 30 मार्च 2024: Debian ने builds रोक दिए और rebuild प्रक्रिया शुरू की
- 2 अप्रैल 2024: XZ के main developer ने backdoor घटना को स्वीकार किया
infection chain के 3 stage
-
Stage 1: बदला हुआ
build-to-host.m4- XZ के official GitHub repository releases में malicious test files शामिल थीं, लेकिन उन files के execute होने का मौका नहीं था, इसलिए शुरुआत में वे harmless थीं
- infection को bootstrap करने वाला malicious code संभवतः
jiaT75के control वालेxz[.]tukaani.orgसे दिए गए releases में शामिल था - अधिकांश distributions ने इसी URL का उपयोग किया, और downloaded release में malicious code वाली
build-to-host.m4file शामिल थी build-to-host.m4build process के दौरान execute होता है औरbad-3-corrupt_lzma2.xzके “broken” data कोtrसे ठीक करने के बादxz -dसे decompress करता है- decompression result में एक shell script होता है, जिसे बाद में
/bin/bashसे execute किया जाना था
-
Stage 2: insert किया गया shell script
- malicious
.m4file द्वारा insert किया गया script जांचता है कि वह Linux machine पर चल रहा है या नहीं, और intended build process के अंदर चल रहा है या नहीं - अगले stage के execution के लिए
good-large_compressed.lzmaइस्तेमाल होता है - यह file XZ से सामान्य रूप से compressed है, लेकिन decompressed data के अंदर junk data है
- script data extract करने के लिए
headpipeline कोevalसे execute करता है - हर
headcommand अगले 1024 bytes को ignore करता है या अगले 2048 bytes या 724 bytes extract करता है - कुल 33,492 bytes extract होते हैं
tailfile के अंतिम 31,265 bytes रखता है और बाकी को ignore करता है- इसके बाद
trसे basic substitution लागू कर obfuscation हटाई जाती है, और दूसरा XZ command बदले हुए bytes को rawlzmastream के रूप में decompress करके result को shell में भेजता है
- malicious
-
Stage 3: backdoor object extraction
- अंतिम stage का shell script कई conditions check करता है कि वह expected environment में चल रहा है या नहीं
- यह check करता है कि project IFUNC इस्तेमाल करने के लिए configured है या नहीं
- यह check करता है कि compilation GCC से हो रहा है या नहीं
- इसके बाद script जांचता है कि project में उसके द्वारा इस्तेमाल की जाने वाली खास file मौजूद है या नहीं
- यह stage
good-large_compressed.lzmaके अलग offset में छिपी object file extract करता है - extraction process कई commands क्रम से चलाता है, और हर command का output अगले command के input में देता है
- XZ tool से
good-large_compressed.lzmaextract किया जाता है eval $iऔर कईheadcalls इस्तेमाल होते हैं- RC4 जैसे custom algorithm से binary data decrypt किया जाता है
- decrypted compressed file को फिर से XZ से extract किया जाता है
- शुरुआत के कुछ bytes हटाने के बाद result को
liblzma_la-crc64-fast.oके रूप में save किया जाता है - अंत में script
liblzmaकीcrc_x86_clmul.hfile मेंis_arch_extension_supportedfunction को modify करता है __get_cpuidcall को_get_cpuidसे बदलकर एक underscore हटाता है- इस बदलाव से backdoor object library में link हो सकता है
binary backdoor loading का तरीका
- मूल XZ code में CRC calculation के लिए special functions
lzma_crc32औरlzma_crc64हैं - दोनों functions ELF symbol table में GLIBC के IFUNC type के रूप में stored हैं
- IFUNC dynamic linker को shared library load करते समय इस्तेमाल किए जाने वाले function को dynamically select करने देता है
- XZ यह feature इसलिए इस्तेमाल करता है ताकि processor की modern capabilities CLMUL, SSSE3, SSE4.1 check करके तय कर सके कि optimized CRC function इस्तेमाल करना है या नहीं
- processor capability check करने के लिए
cpuidcommand की जरूरत होती है, और GLIBC द्वारा दिया गया__get_cpuidwrapper call होता है - malicious script ने
__get_cpuidको_get_cpuidमें बदल दिया, जिससे code call backdoor object file के अंदर मौजूद_get_cpuidsymbol से जुड़ गया - शुरुआती backdoor code दो बार call होता है क्योंकि
lzma_crc32औरlzma_crc64दोनों वही modified function_get_cpuidइस्तेमाल करते हैं- simple counter से जांचता है कि पहले से execute हुआ है या नहीं
- अगर
lzma_crc64IFUNC_get_cpuidcall करता है और counter value 1 है, तो final entry point पर redirect करने वाला stage शुरू होता है
runtime behavior और hooking targets
- backdoor चल रहे process की key information रखने वाले structures initialize करता है
- hardcoded offsets से Global Offset Table(GOT) address ढूंढता है, और उसके अंदर
cpuidpointer खोजता है - इसके बाद pointer को main malicious function से बदलकर ऐसे malicious function call करता है जैसे
cpuidcall हो रहा हो - मुख्य लक्ष्य कुछ functions को hook करना है ताकि infected machine पर आने वाले connections की निगरानी की जा सके
- target functions
libcryptoसे संबंधित हैंRSA_public_decrypt: private key से signed ciphertext decrypt करते समय इस्तेमाल होता हैEVP_PKEY_set1_RSA: किसी specific context की RSA key set करते समय इस्तेमाल होता है- modern SSH server versions में नहीं है, लेकिन standalone SSH key generation tool में इस्तेमाल होता है
RSA_get0_key: RSA key प्राप्त करने के लिए इस्तेमाल होता है
- hooking process में कई internal structures तक पहुंच और process-specific structures में manipulation की जरूरत होती है, और malicious code analysis avoidance checks भी करता है
execution environment checks और analysis evasion techniques
-
sshdऔर kill switch की जांच- backdoor सबसे पहले symbol addresses को dynamically resolve करने वाले
ld-linuxdynamic linker को parse करता है - यह check करता है कि current runtime environment criteria से match करता है या नहीं
- यह check करता है कि current process
/usr/bin/sshdहै या नहीं - यह check करता है कि kill switch मौजूद है या नहीं
- current process name
argv[0]से extract किया जाता है - process environment variables सभी parse किए जाते हैं और internal string table में मौजूद values से match हैं या नहीं, यह जांचा जाता है
- अगर कोई matching environment variable हो या process
sshdन हो, तो malicious code execution रोक देता है - internal table का एकमात्र variable
yolAbejyiejuvnup=Evjtgvsh5okmkAvjइस context में kill switch की तरह काम करता है
- backdoor सबसे पहले symbol addresses को dynamically resolve करने वाले
-
trie-आधारित string processing
- backdoor की एक खासियत यह है कि string operations के लिए single trie structure इस्तेमाल करता है
- function names जैसे constants को सीधे compare करने या string hash से compare करने के बजाय, यह check करता है कि trie lookup result किसी specific constant value के बराबर है या नहीं
- ELF header का magic value trie से 0x300 लौटाता है
systemfunction name 0x9F8 return value से match होता है- trie सिर्फ comparison के लिए नहीं, host binary के अंदर strings खोजने के लिए भी इस्तेमाल होता है
- उदाहरण के लिए
ssh-2.0जैसे string pointer इस्तेमाल करने वाला function host binary में string खोजता है ताकि backdoor body में suspicious data न बचे - implementation 16-byte bitmask इस्तेमाल करता है
- हर half input byte ranges
0x00-0x3F,0x40-0x7Fसे correspond करता है - trie leaf node 2-byte होता है, जिसमें 3 bits flags के लिए इस्तेमाल होते हैं और बाकी value या next node location के लिए reserved होते हैं
symbol resolution और rtdl-audit hooking
-
symbol resolution routines
- backdoor में ELF Symbol structure खोजने के लिए कम से कम 3 symbol resolution routines हैं
- सभी symbol resolution functions input के रूप में trie में search की जाने वाली key लेते हैं
- एक resolver सभी symbols पर iterate करके desired key वाला symbol खोजता है, और मिलने पर
Elf64_Symstructure return करता है - यह structure बाद में backdoor के internal structures fill करने और required function pointers store करने के लिए इस्तेमाल होता है
- यह process Windows threats में आम तौर पर दिखने वाले API hashing routine जैसा है
- backdoor बाद में cryptographic routines में इस्तेमाल होने वाले कई OpenSSL
libcryptofunctions खोजता है - खोजे और resolved किए गए functions की संख्या track की जाती है, और इसी value से तय होता है कि normal execution होगा या रुकना है
-
lzma_allocका दुरुपयोग करने वाला fake allocator- एक और symbol resolver
liblzmaके अपने functionlzma_allocका दुरुपयोग करता है lzma_allocएक function है जो default allocatormallocया custom allocator इस्तेमाल करके memory efficiently allocate करने में मदद करता है- XZ backdoor में fake allocator के जरिए यह function एक और symbol resolver की तरह काम करता है
- मूल रूप से “allocation size” के लिए इस्तेमाल parameter असल में trie के अंदर symbol key के रूप में इस्तेमाल होता है
- इस trick का मकसद backdoor analysis को कठिन बनाना है
- backdoor runtime के दौरान dynamically symbols resolve करता है, और यह इस तरीके तक सीमित नहीं है कि सभी symbols एक साथ resolve करे या केवल जरूरत के समय resolve करे
- resolution targets में normal OpenSSL functions से लेकर machine पर command execute करने वाले
systemजैसे functions तक शामिल हैं
- एक और symbol resolver
-
rtdl-auditruntime patching- backdoor function hooking के लिए dynamic linker के rtdl-audit feature का इस्तेमाल करता है
- आम तौर पर
rtdl-auditएक feature है जिससे developers custom shared library बनाकर symbol resolution जैसे linker events की notifications पा सकते हैं - XZ backdoor अलग shared library बनाने के बजाय memory में पहले से registered default interface को runtime patch करके symbol resolution routines hijack करता है
- dynamic linker memory area के
dl_auditglobal variable में stored maliciousaudit_ifacestructure मेंsymbind64callback address होता है - जब dynamic linker यह callback call करता है, तो सभी symbol information backdoor के control में चली जाती है, और target functions के लिए malicious address return करके hooking हासिल होती है
dl_auditऔरdl_nauditaddressesdl_mainऔरdl_audit_symbind_altfunctions को disassemble करके प्राप्त किए जाते हैं- backdoor में instruction decoding के लिए internal minimal disassembler शामिल है, और
*auditaddress जैसे specific values खोजने में इसका बड़े पैमाने पर इस्तेमाल होता है
पुष्टि किए गए backdoor distributions और detection information
-
backdoor वाले source distributions
- xz-5.6.0
- MD5:
c518d573a716b2b2bc2413e6c9b5dbde - SHA1:
e7bbec6f99b6b06c46420d4b6e5b6daa86948d3b - SHA256:
0f5c81f14171b74fcc9777d302304d964e63ffc2d7b634ef023a7249d9b5d875
- MD5:
- xz-5.6.1
- MD5:
5aeddab53ee2cbd694f901a080f84bf1 - SHA1:
675fd58f48dba5eceaf8bfc259d0ea1aab7ad0a7 - SHA256:
2398f4a8e53345325f44bdd9f0cc7401bd9025d736c6d43b372f4dea77bf75b8
- MD5:
- xz-5.6.0
-
विश्लेषित प्रमुख artifacts
bad-3-corrupt_lzma2.xz:86fc2c94f8fa3938e3261d0b9eb4836be289f8aebuild-to-host.m4:b4dd2661a7c69e85f19216a6dbbb1664good-large_compressed.lzma:540c665dfcd4e5cfba5b72b4787fec4fliblzma_la-crc64-fast.o:212ffa0b24bb7d749532425a46764433
-
ज्ञात backdoor वाली libraries
- Debian Sid
liblzma.so.5.6.0- MD5:
4f0cf1d2a2d44b75079b3ea5ed28fe54 - SHA1:
72e8163734d586b6360b24167a3aff2a3c961efb - SHA256:
319feb5a9cddd81955d915b5632b4a5f8f9080281fb46e2f6d69d53f693c23ae
- MD5:
- Debian Sid
liblzma.so.5.6.1- MD5:
53d82bb511b71a5d4794cf2d8a2072c1 - SHA1:
8a75968834fc11ba774d7bbdc566d272ff45476c - SHA256:
605861f833fc181c7cdcabd5577ddb8989bea332648a8f498b4eef89b8f85ad4
- MD5:
- Debian Sid
-
detection names
- Kaspersky products हमले से जुड़े malicious objects को HEUR:Trojan.Script.XZ और Trojan.Shell.XZ के रूप में detect करते हैं
- Kaspersky Endpoint Security for Linux, Critical Areas Scan task के हिस्से के रूप में SSHD process memory में मौजूद malicious code को MEM:Trojan.Linux.XZ के रूप में detect करता है
- प्रदान किया गया Yara rule CVE-2024-3094 से संबंधित malicious
get_cpuidfunction खोजने के लिएliblzma_get_cpuid_functionrule है
1 टिप्पणियां
Hacker News की राय
लगता है यह वाक्य असल में जो हुआ, उसे कुछ कम करके बता रहा है
backdoor के तकनीकी पहलू से ज्यादा डरावनी चीज social engineering की मात्रा और स्तर है। backdoor अंतिम product था, और उसे डाल पाना इसलिए संभव हुआ क्योंकि उस समय तक पूरा xz project लंबे समय से malicious actors, यानी “Jia Tan” और उसके आसपास के लोगों के कब्जे में आ चुका था। maintainer के खिलाफ एक साल से ज्यादा समय तक psychological operation चलाया गया, और maintainer या किसी और को पता नहीं चला
यह spy novel जैसी बात है, और अगर ऐसी चीज संभव है, तो उत्सुकता होती है कि अभी दूसरे projects में और क्या-क्या चल रहा होगा
backdoor code में भी वही सोच दिखती है। यह सिर्फ harmless दिखने की कोशिश नहीं करता, बल्कि commit messages, comments, variable names, command selection आदि के जरिए ऊपर से यह कहानी सक्रिय रूप से बनाता है कि वह क्या कर रहा है, जबकि असल में वह बिल्कुल अलग काम कर रहा होता है। संरचना ऐसी है कि code को पहले देखने वाला व्यक्ति पहले अपनी समझ पर शक करे, फिर bug पर शक करे, और काफी देर बाद जाकर malicious intent पर शक करे
उम्मीद है कि जो भी intelligence agencies हों, वे इस incident की और गहराई से जांच कर रही होंगी
backdoor से जुड़े हर HN thread में जब इस संभावना को paranoia या tinfoil-hat सोच बताकर नकारा जाता है, तो झुंझलाहट होती है। इसे ऐसे treat किया जाता है जैसे ऐसा होता ही नहीं, जबकि यह बस पकड़ा गया एक ठोस मामला है; जो अभी नहीं पकड़े गए हैं, वे अनगिनत हैं
यह मामला open source project था, इसलिए discovery अपेक्षाकृत आसान थी, फिर भी किस्मत अच्छी रही। अब closed-source products के बारे में सोचें, तो backdoor डालना एक organization में घुसपैठ करने या उस पर दबाव डालने की समस्या भर रह जाता है। ऐसी चीजें अक्सर होती हैं। कोई मानना नहीं चाहता, लेकिन यह आम है। जिसने tech infrastructure company में काम किया हो, उसके पास कुछ कहानियां होंगी। NDA या उससे भी गंभीर वजहों से बताना मुश्किल होता है, लेकिन यह सच में होता है
यह किसी व्यक्ति की obsession का परिणाम हो सकता है, या किसी private security firm या state actor का काम हो सकता है जो कई projects पर 9 से 5 की job की तरह ऐसी चीजें करता हो
अब तक ध्यान backdoor के सफलतापूर्वक काम करने और लक्ष्य हासिल करने के तरीके पर केंद्रित रहा है, यह स्वाभाविक है
फिर भी गलतियों और over-engineered हिस्सों पर गहरी analysis देखना चाहूंगा। Bryan Cantril interview [1] में Andrés कहते हैं कि यह ऐसा लगता है जैसे off-the-shelf backdoor component हो, जो deployment method तक को ठीक से जानकर नहीं बनाया गया था, इसलिए इसमें कई बेवकूफी भरी चीजें थीं। उदाहरण के लिए symbol table lookup, जिसने उन्हें जांच करने पर मजबूर किया
इसी तरह यह भी उत्सुकता है कि RC4 से 48 bytes क्यों काटे गए [2]
अगर उनके पास और समय होता या बेहतर team होती, तो वे इसे कैसे बेहतर बना सकते थे, या कहां उन्होंने ज्यादा बड़ी गलती की, इस पर भी सुनना चाहूंगा
[1] https://youtu.be/jg5F9UupL6I?si=gvXsYFXgagkGOMd4
[2] https://twitter.com/matthew_d_green/status/17744729080201014...
अगर मैं सही समझा हूं, तो एक उपयोगी hardening यह हो सकती है कि हर dynamic link library की अपनी GOT हो, और dynamic linking खत्म होने के बाद table को read-only mark कर दिया जाए। यानी dynamic boundary के पार दूसरी तरफ के ifunc entries को patch न किया जा सके
इससे ऐसे code की supply-chain security बेहतर हो सकती है जो कहीं link तो होता है, लेकिन execute नहीं होता
आगे बढ़कर, ifunc को declarative तरीके से implement करना बेहतर हो सकता है, ताकि link की जा रही हर library में arbitrary code execution न हो सके। backward compatibility के कारण अभी implementation मुश्किल होगा, लेकिन लंबे समय में इसे layered तरीके से अपनाया जा सकता है। उदाहरण के लिए, अगर किसी library को “declarative link ifunc” feature bit के साथ build किया जाए, तो dynamic linker execution fail कर दे जब तक linked सभी libraries में वही feature flag न हो
फिलहाल ज्यादातर library builds बेहद जटिल और अस्पष्ट scripts चलाते हैं, जिन्हें Turing-complete environment चाहिए। यह attacker को अंतहीन attack surface देता है, और build process hijack हो जाए तो मौका मिल जाता है
runner को सीमित state machine तक रखने वाले declarative build process की तरफ जाना मददगार होगा। यह requirement भी सोचने लायक है कि source के हर chunk को reproducible होना चाहिए
उस point से आगे सभी defenses बेअसर हो जाते हैं। चाहें तो GOT को फिर से writable map कर सकते हैं, और भले ही ऐसा व्यवहार “suspicious” के रूप में detect हो या OS transition को रोक सके, injected code control flow को सैकड़ों दूसरे तरीकों से पलट सकता है। arbitrary read/write, code execution, सब कुछ संभव है। इस स्तर की compromise को रोकने वाली कोई security mitigation नहीं है। चाहें तो private key leak करके सीधे attacker को भेज सकते हैं, या shell खोल सकते हैं। इस stage पर protection design करने की कोशिश बेकार है
सही function pointer पहली बार call होने पर load होता है और stub की जगह table में डाल दिया जाता है, और वह समय मनमाने रूप से बहुत दूर future में हो सकता है। असल में gtk apps जैसे बड़े library ecosystems में linked functions में से ज्यादातर कभी call ही नहीं होते
-march=nativeसे build करना आम है, और glibc के USE flag में-multiarchset करने से ifunc disable करना आसान है। कोई negative impact नहीं देखापहले 3 चरणों के बारे में यह लेख पिछले 2 हफ्तों में जो जानकारी सामने आई है, उसमें बहुत कुछ नया नहीं जोड़ता। यह flowchart के साथ एक अच्छी summary जैसा है
लेकिन binary को इतनी detail में analyze करने वाला हिस्सा नया लगता है
उसमें दिखा source code कैसे बनाया गया होगा? Disassembler चलाकर, code क्या कर रहा है यह समझने के बाद, सभी नामों को descriptive नामों में बदल दिया गया? 2 हफ्तों में यह कर लेना काफी बड़ी उपलब्धि लगती है
Global Research & Analysis Team, Kaspersky Lab
https://securelist.com/author/great/
लगता है लेख लिखने वाले Kaspersky Lab की malware analysis team हैं, इसलिए संभावना है कि वे binary reverse engineering में काफी अच्छे हों
https://hex-rays.com/ida-pro/
असली जिज्ञासा यह है कि xz की जांच शुरू करवाने वाली SSH initial delay ठीक किस वजह से हुई थी। क्या किसी ने पता लगाया?
जिन लोगों ने code की reverse engineering की है, उनके मुताबिक command message को SSH host key से भी bind करना पड़ता है। इसलिए अगर host key RSA key हो, तो हर connection पर अतिरिक्त RSA decryption operation भी हुआ हो सकता है
वह delay की वजह के लिए पर्याप्त लगता है
पहले code injection की कोशिश किए बिना, बाहर से यह पता लगाने का आसान तरीका है कि server infected है या नहीं
लेखकों को glibc internals की बहुत गहरी जानकारी है। यह वैसी चीजें हैं जो source code में गले तक डूबे रहने पर ही पता चलती हैं, और इसमें कई नई techniques भी हैं
custom ELF parser और disassembler इतने जटिल हैं कि यह कल्पना करना मुश्किल है कि उस code को पहले कहीं और इस्तेमाल नहीं किया गया होगा या आगे फिर इस्तेमाल नहीं किया जाएगा
सोचता हूं कि क्या इस मामले की जितनी गंभीर investigation होनी चाहिए, उतनी होगी; लेकिन ऐसा लगता नहीं
आखिरकार, क्या किसी ने उस backdoor bug का analysis किया है जिसकी वजह से Valgrind error और SSH slowdown सामने आए?
Valgrind “fix” ifunc को disable करना था, और इसके परिणामस्वरूप backdoor disable हो गया और error गायब हो गया
slowdown, मेरी जानकारी में, backdoor द्वारा किए गए सभी symbol और instruction lookups से आया
twist के तौर पर देखें तो, attacker ने scripts और code में detection से बचने के लिए जितनी मेहनत की, उसे देखते हुए यह पूरा project ध्यान भटकाने के लिए हो सकता है, या एक साथ चल रहे कई प्रयासों के बीच backup plan भी हो सकता है
ऐसी चीजों से एक कदम आगे रहने के लिए क्या करना चाहिए? community का SSHD पर focus करना क्या पूरे system के दूसरे हिस्सों को प्रभावित करेगा? दूसरे technical या social पहलुओं पर?
aluminium foil hat मजेदार है
या Microsoft जैसी जगहों से closed source खरीदकर उम्मीद कर सकते हैं कि उनके पास code को ज्यादा सख्ती से review करने के संसाधन और इच्छा होगी
और अजीब network activity और privilege escalation attempts detect करने के लिए एक अच्छी security operations team रखने वाला approach तो हमेशा है ही
बस जिन contributors का काम कर रहे project के बाहर कोई history या footprint नहीं है, उन्हें आगे से red flag माना जाना चाहिए
पुराने groups GOBBLES, ADM, ac1db1tch3z, ~el8 ने भी ऐसा किया था, और isec.pl जैसे private “security researchers” ने भी
इस बार यह इसलिए समस्या है क्योंकि state actors उस corporate capitalism का फायदा उठा रहे हैं जिसने foundation projects को कम वेतन पर टिकाए रखने वाला दौर बनाया है। malicious actors के पास अपने targets हासिल करने के लिए practically unlimited resources हैं
आखिरकार उसी ने NSO, Zerodium जैसे संगठनों की demand और जन्म पैदा किया
उससे पहले exploits और backdoors की value लगभग नहीं थी, और hackers Qualys जैसी कंपनियों से sponsorship या hiring की उम्मीद करते थे
मैंने Google की zero-day vulnerability hacking analysis कुछ बार देखी हैं और वे भी unrealistically शानदार थीं, लेकिन यह hack अब तक के सबसे बड़े hacks में से एक लगता है
मैंने देखा कि xz repository फिर से GitHub पर आ गई है, और Lasse तथा एक नया contributor cleanup कर रहे थे। उन्होंने ifunc support हटा दिया है, और blobs के बिना test files बना सकें, इसके लिए test file generation code repository में commit किया है। लगता है काम सही दिशा में हो रहा है