- Damien Miller ने ssh(1) client में keypresses के बीच के समय की जानकारी छिपाने वाला obfuscation फ़ीचर commit किया
- interactive traffic में भेजा जाने वाला डेटा कम होने पर यह fixed-interval transmission का उपयोग करता है, और default interval 20ms है
- आख़िरी वास्तविक keypress के बाद यह कुछ random समय तक fake chaff keystrokes भेजता है ताकि timing pattern और धुंधला हो जाए
- इसका व्यवहार नए
ssh_configkeywordObscureKeystrokeTimingसे नियंत्रित होता है - implementation में SSH transport layer के नए PING/PONG extension का उपयोग होता है, और बाद में
openssh-portableके ज़रिए यह दूसरे systems तक भी पहुँच सकता है
ssh(1) client में keypress timing छिपाना
- Damien Miller ने ssh(1) में keystroke timing obfuscation support commit किया
- यह फ़ीचर keypresses के बीच के time interval को छिपाने के लिए कम डेटा वाले interactive traffic को fixed interval पर भेजने की कोशिश करता है
- default transmission interval 20ms है
- आख़िरी वास्तविक keypress के बाद कुछ random समय तक fake chaff keystrokes भेजे जाते हैं
- नए
ssh_configkeywordObscureKeystrokeTimingसे इसका व्यवहार नियंत्रित होता है
SSH protocol extension और deployment path
- implementation SSH protocol में जोड़े गए transport layer के दो नए messages का उपयोग करती है
SSH2_MSG_PINGSSH2_MSG_PONG
- ये messages local extensions number space का उपयोग करते हैं, और
"ping@openssh.com"ext-infomessage तथा string version"0"के साथ advertise किए जाते हैं - इस बदलाव को “security by trickery” के एक उदाहरण के रूप में पेश किया गया है, और इसे अगली OpenBSD release का इंतज़ार करने की वजहों में गिना गया है
- दूसरे systems में यह फ़ीचर जल्द openssh-portable के माध्यम से दिखाई दे सकता है
1 टिप्पणियां
Hacker News की राय
की-इनपुट टाइमिंग 1980 के दशक से ही टर्मिनल input/output में चिंता का विषय रही है, और उस समय भी stelnet या Kerberos जैसे शुरुआती encrypted environments में इस पर ध्यान दिया जाता था
ज़्यादातर terminal apps password input के लिए buffered input/output का उपयोग करते हैं, और यह अब भी एक महत्वपूर्ण security feature है
इस mode में user के Enter दबाने से पहले दूसरी ओर कुछ भी भेजा नहीं जाता, इसलिए padding हो तो man-in-the-middle attacker के लिए password की लंबाई तक का अंदाज़ा लगाना मुश्किल होता है
कुछ समय तक वे apps आसान निशाना थे जो user के हर input पर
*दिखाने के लिए password को unbuffered mode में लेते थेदेखने में यह अच्छा लगता है और feedback भी देता है, लेकिन password input में जिस key input speed को सबसे ज़्यादा छिपाना चाहिए, वही leak कर देता है
password input के लिए buffered input/output बनाए रखना चाहिए, और मुझे लगता है कि यह तरीका SSH की obfuscation के बावजूद उसका पीछा करना मुश्किल बना देने जितना बेहतर है
फिर भी SSH ने यह feature जोड़ा, यह अच्छी बात है, और shell या editor input जैसी ऐसी चीज़ों की सुरक्षा में मदद करेगा जिन्हें buffer नहीं किया जा सकता
वे सोच सकते हैं कि “लंबाई गलत है, इसलिए शायद password गलत है” और saved password के फायदे को खत्म करते हुए खुद “सही” password फिर से type करने की कोशिश कर सकते हैं
पहले शायद 2-character hash और smiley जैसे visual hash दिखाने के तरीके भी थे, लेकिन shoulder-surfing attacks में वे उल्टा मदद कर सकते हैं
अब इसे touchscreen login पर भी लागू किया जा सकता है, जैसे finger pressure, contact area और shape को user से जोड़ना
swipe या mouse movements तक को desktop OS context में शामिल करें, तो ऐसी security app भी संभव है जो तब system lock कर दे जब कोई ऐसा user इस्तेमाल कर रहा हो जो अपने device या account पर नहीं है
कम से कम यह तो record किया जा सकता है कि मेरी partner ने मेरा phone कब खंगाला
यानी input तब तक transmit न हो जब तक Enter या send button न दबाया जाए
पहले जब मैं MUD बहुत खेलता था, तब ऐसे Telnet client इस्तेमाल करता था, लेकिन उसके बाद जिन SSH clients का इस्तेमाल किया, उनमें ऐसा कभी नहीं देखा
SSH key input timing leak रोकने के बचाव के रूप में यह ठीक लगता है, और कुछ use scenarios में article में बताए गए 20ms delay method से बेहतर भी हो सकता है
हालांकि सोचने पर लगता है कि Linux shell autocomplete के लिए Tab दबाने पर भी transmit हो तो और ideal होगा
Pro Bridge याद आ गया
teamों को दीवार से अलग कर दिया जाता है और cards को खिड़की से एक साथ आगे बढ़ाया जाता है, ताकि timing के ज़रिये communication रोका जा सके
https://youtube.com/watch?v=RVZLNRmO3vo
https://en.wikipedia.org/wiki/Blue_Team_(bridge)#Cheating_an...
https://en.wikipedia.org/wiki/Fantoni_and_Nunes_cheating_sca...
https://en.wikipedia.org/wiki/Fisher_and_Schwartz_cheating_s...
और ये तो सिर्फ वे मामले हैं जिनके बारे में हमें पता है
कभी एक interview में मैंने Bridge को सचमुच इस्तेमाल किया था
Bridge में Active Ethics rule होता है कि अगर partner bidding के अलावा किसी तरीके से hint दे, तो logically possible होने पर आपको ज़रूर विपरीत direction चुननी चाहिए
debugging interview में interviewer मुझे answer की ओर बहुत साफ़ तौर पर खींचने की कोशिश कर रहा था, इसलिए उसने जैसा कहा वैसा करने से पहले मेरे मन में आने वाली हर चीज़ रोककर check की
interview के बाद मैंने बताया कि मैंने ऐसा क्यों किया, और कहा कि अगर और explanation चाहिए तो Active Ethics खोज लें
और मैं select हो गया
यह वैसा ही है जैसे कहना कि catcher pitcher को signal नहीं दे सकता
information transfer game में एक dimension जोड़ने वाली मानवीय skill है, और जो इसे सबसे अच्छी तरह करता है उसे जीतने देना चाहिए
1–2 bits जितनी information पास करना इतना मुश्किल नहीं लगता
partner के साथ secret communication ही core है, लेकिन वह communication secret नहीं होना चाहिए
communication कर सकते हैं, पर communication नहीं करना चाहिए—कुछ ऐसा, इसलिए बहुत अजीब है
उदाहरण के लिए, छोटी table को barrier के पार हल्का धक्का देकर या धीरे-धीरे धकेलकर कुछ संकेत दिया जा सकता है
video के top right वाला व्यक्ति first और second hand में ऐसा ही कर रहा था
ऐसे timing attacks पर 2001 के paper का परिचय कराने वाला 2008 का एक article है: https://lwn.net/Articles/298833/
quoted paper “Timing analysis of keystrokes and timing attacks on SSH” है, और यह analyze करता है कि key input timing information typed key sequence के बारे में information leak करती है
और detailed analysis में कहा गया है कि हर pair of keystrokes के लिए content के बारे में लगभग 1 bit information leak होती है, और password entropy प्रति character लगभग 4–8 bits होती है, इसलिए यह information काफी meaningful हो सकती है
मुझे लगा था कि यह बहुत पहले fix हो चुका है, और 2012 के आसपास fix आया था, ऐसा सोचता था, इसलिए यह जानकर काफ़ी हैरानी है कि अब तक हल नहीं हुआ
कभी न कभी की-इनपुट छिपाने के लिए random data से पहले से भरे हुए packets इस्तेमाल करने पड़ सकते हैं
यह steganography तो नहीं है, लेकिन काफी करीब की चीज़ है, और लगता है कि traffic analysis को और कठिन या असंभव बनाने में भी इस्तेमाल हो सकता है
dedicated line हो तो line को हमेशा maximum utilization पर पूरी तरह encrypted data से बहाते रखना, और जरूरत पड़ने पर ही असली data उस पर चढ़ा देना, इतना मुश्किल नहीं है
इसमें harmless cover text को language model से rewrite कराया जाता है, लेकिन word sampling में इस्तेमाल होने वाले probability distribution को key से निकले minimal entropy distortion से बदल दिया जाता है—ऐसी research मौजूद है
receiving side पर वही model और key इस्तेमाल करने पर cover text को फिर से ciphertext में decrypt किया जा सकता है, और यह images पर भी लागू होता है
https://openreview.net/forum?id=HQ67mj5rJdR
वे लगातार पूरी दुनिया में numbers broadcast करती रहती हैं, और उन numbers का अर्थ तभी बनता है जब वे किसी के लिए meaningful हों
दुनिया की intelligence agencies सुन रही हैं, यह साफ पता होने के बावजूद वे ऐसा करती हैं
macOS के Warp जैसे modern terminal emulators याद आते हैं
उदाहरण के लिए, सोचता हूं कि क्या वे सारी input local पर लेकर remote host को एक ही chunk में भेजते हैं
ऐसा करने पर remote host पर चलने वाली कोई raw mode input टूट सकती है, लेकिन शायद ऐसी स्थिति detect करके raw keystroke stream पर switch भी किया जा सकता है
[1]: https://warp.dev
remote pty line mode में भी हो सकता है और raw mode में भी
special shell integration वाले terminals में आम तौर पर remote host पर भी वही integration install होना जरूरी होता है, और कुछ इसे काफी transparent तरीके से handle करते हैं
इसलिए high-latency connections पर mosh, pure SSH से बेहतर व्यवहार दिखा सकता है
हालांकि यह feature mosh पर लागू नहीं होगा
कुछ खास security features, जैसे timing attack defense, नए tools बेहतर तरीके से रोक सकते हैं और पुराने standard tools में शायद न हों
लेकिन नए tools में दूसरे security features के छूट जाने की संभावना कहीं ज्यादा है, और “AI” जोड़ने से attack surface भी बहुत बढ़ जाता है
Warp के privacy claims पर भी ईमानदारी से भरोसा करना मुश्किल है
आजकल natural language processing tools लगभग cloud solutions की तरफ झुके हुए हैं, और तब privacy की संभावना लगभग तुरंत 0 के करीब पहुंच जाती है
जानना चाहता हूं कि यह किस threat को mitigate करता है
अगर target का typing pattern पता हो, तो उस data से content reconstruct किया जा सकता है
target से JavaScript enabled browser में मेरे control वाली website पर type करवाकर, या typing sound record करके pattern collect किया जा सकता है
हाल ही में कुछ online streamers पर ऐसे attacks भी हुए हैं, जिनमें keyboard typing sounds पर trained AI model से passwords चुराए गए
यह feature शायद उसे रोकने के लिए noise add करता है
http://www.cs.berkeley.edu/~dawnsong/papers/ssh-timing.pdf [2001]
machine learning जुड़ने के बाद audio decryption accuracy काफी बेहतर हो गई है, इसलिए physically unsafe जगहों पर quiet keyboard इस्तेमाल करना बेहतर है
https://arstechnica.com/gadgets/2023/08/type-softly-research...
उदाहरण के लिए user आम तौर पर password को बाकी input से ज्यादा तेजी से type करता है, इसलिए
sudoजैसी operations में एक बार में भेजी गई key inputs की संख्या देखकर password length का अंदाजा लगाया जा सकता हैइस paper का use case अपने-आप में security threat नहीं है, लेकिन इसे information leakage के रूप में समझा जा सकता है
जानना चाहता हूं कि latency कितनी add होती है
खासकर unpredictable latency software development work में stress के सबसे बड़े कारणों में से एक है
जब केवल थोड़ी मात्रा में data transmit होता है, तो interactive traffic को fixed interval पर भेजा जाता है, और default 20ms है
[1]
Mosh जैसे tools perceived latency घटाने में काफी मदद करते हैं
Mosh user keystroke local पर register होते ही उसे दिखा देता है, और round trip पूरा नहीं हुआ है यह बताने के लिए उसे faded color में दिखाता है
मैंने आखिरी बार जब देखा था तो ऐसा ही था, और शायद underline भी हो सकता है
round trip पूरा होने पर character normal दिखने लगता है
[1] अगर software development में सबसे बड़ा stress factor key input latency है, तो यह काफी lucky स्थिति लगती है
[2]: https://mosh.org
वास्तविक commit लिंक: https://github.com/openssh/openssh-portable/commit/7603ba712...
लगता है कुछ लोग packet timing मापकर network पर hands-on-keyboard shell detect करते हैं; सोच रहा/रही हूँ कि यह बदलाव ऐसी detection को कितना बाधित करेगा
security को लेकर यह तरीका मुझे सच में गलत लगता है
यह जानना अच्छा हो सकता है कि कोई automation script किसी device में login कर रही है या नहीं, लेकिन बेहतर design में उस जानकारी को मायने नहीं रखना चाहिए