Bổ sung làm rối thời điểm gõ phím vào ssh(1)
(undeadly.org)- Damien Miller đã commit tính năng làm rối nhằm che giấu thông tin thời gian giữa các lần nhấn phím vào client ssh(1)
- Với lưu lượng tương tác có ít dữ liệu được gửi, tính năng này dùng truyền theo khoảng cố định, với khoảng mặc định là 20ms
- Sau lần nhấn phím thật cuối cùng, hệ thống gửi các lần nhấn phím chaff giả trong một khoảng thời gian ngẫu nhiên để làm mờ thêm mẫu thời gian
- Hoạt động được điều khiển bằng từ khóa
ssh_configmới làObscureKeystrokeTiming - Việc triển khai sử dụng mở rộng PING/PONG mới của tầng truyền tải SSH, và sau đó có thể sẽ được đưa sang các hệ thống khác thông qua
openssh-portable
Che giấu thời điểm gõ phím của client ssh(1)
- Damien Miller đã commit hỗ trợ làm rối thời điểm gõ phím cho ssh(1)
- Tính năng này cố gắng truyền lưu lượng tương tác có ít dữ liệu gửi đi theo khoảng cố định để che giấu khoảng thời gian giữa các lần nhấn phím
- Khoảng truyền mặc định là 20ms
- Sau lần nhấn phím thật cuối cùng, hệ thống gửi các lần nhấn phím chaff giả trong một khoảng thời gian ngẫu nhiên
- Hành vi được điều khiển bằng từ khóa
ssh_configmới làObscureKeystrokeTiming
Mở rộng giao thức SSH và lộ trình phân phối
- Việc triển khai sử dụng hai thông điệp tầng truyền tải mới được thêm vào giao thức SSH
SSH2_MSG_PINGSSH2_MSG_PONG
- Các thông điệp này dùng không gian số local extensions, và được quảng bá bằng thông điệp
"ping@openssh.com"ext-infocùng chuỗi phiên bản"0" - Thay đổi này được giới thiệu như một ví dụ của “security by trickery”, đồng thời được xem là một lý do để mong đợi bản phát hành OpenBSD tiếp theo
- Các hệ thống khác có thể sớm thấy tính năng này thông qua openssh-portable
1 bình luận
Ý kiến trên Hacker News
Thời điểm nhấn phím đã là một vấn đề đáng lo ngại trong I/O terminal từ thập niên 1980, và ngay cả khi đó, các môi trường mã hóa sơ khai như stelnet hay Kerberos cũng đã để ý đến nó
Hầu hết ứng dụng terminal dùng I/O có đệm khi nhập mật khẩu, và đây vẫn là một tính năng bảo mật quan trọng
Ở chế độ này, không có gì được gửi sang phía bên kia cho đến khi người dùng nhấn Enter, nên nếu có padding thì kẻ tấn công trung gian khó mà suy ra được ngay cả độ dài mật khẩu
Trong một thời gian, các ứng dụng nhận mật khẩu ở chế độ không đệm để hiển thị
*mỗi khi người dùng gõ từng là mục tiêu ngon ănTrông thì hay và có phản hồi, nhưng lại làm lộ tốc độ gõ phím, thứ cần được che giấu nhất khi nhập mật khẩu
Tôi mong I/O có đệm vẫn tiếp tục được duy trì cho việc nhập mật khẩu, và cho rằng cách này tốt đến mức SSH khó theo kịp dù có làm rối
Dù vậy, việc SSH thêm tính năng này là điều tốt, và nó giúp bảo vệ những nội dung không thể đệm như nhập liệu trong shell hay trình soạn thảo
Họ có thể nghĩ “độ dài sai nên chắc là không đúng”, làm mất lợi ích của mật khẩu đã lưu và cố tự nhập lại mật khẩu “đúng”
Trước đây hình như cũng có cách hiển thị hash trực quan như hash 2 chữ số và biểu tượng mặt cười, nhưng điều đó có thể lại giúp ích cho kiểu tấn công nhìn trộm qua vai
Ngày nay có thể áp dụng điều này cả với đăng nhập bằng màn hình cảm ứng, bằng cách liên kết áp lực ngón tay, diện tích tiếp xúc và hình dạng với người dùng
Nếu tính cả thao tác vuốt hay chuyển động chuột trong ngữ cảnh hệ điều hành desktop, cũng có thể có ứng dụng bảo mật khóa hệ thống khi người đang dùng không phải chủ thiết bị hoặc tài khoản
Ít nhất thì cũng có thể ghi lại thời điểm người yêu lục điện thoại của tôi
Tức là nội dung đã nhập sẽ không được gửi đi cho đến khi nhấn Enter hoặc nút gửi
Trước đây khi còn chơi MUD nhiều, tôi từng dùng các Telnet client như vậy, nhưng sau đó chưa thấy SSH client nào làm thế
Đây có vẻ là một biện pháp phòng vệ ổn để ngăn rò rỉ timing phím trong SSH, và trong một số kịch bản sử dụng còn có thể tốt hơn cách trì hoãn 20ms được nói trong bài
Tuy nhiên nghĩ lại thì sẽ lý tưởng hơn nếu cả lúc nhấn Tab để tự hoàn thành trong shell Linux cũng được gửi
Làm tôi nhớ đến Bridge chuyên nghiệp
Họ chia đội bằng một bức tường và đồng thời đưa bài qua một ô cửa, để ngăn giao tiếp thông qua timing
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...
Và đó chỉ là những vụ chúng ta biết
Trước đây tôi từng thực sự áp dụng Bridge trong một buổi phỏng vấn
Trong Bridge có quy tắc Active Ethics: nếu đối tác đưa gợi ý bằng cách khác ngoài việc đấu giá, khi về mặt logic có thể thì bạn bắt buộc phải chọn hướng ngược lại
Trong một buổi phỏng vấn debug, người phỏng vấn cố kéo tôi đến đáp án quá lộ liễu, nên trước khi làm theo điều anh ta nói, tôi dừng lại và kiểm tra mọi thứ mình nghĩ ra
Sau buổi phỏng vấn tôi nói lý do vì sao mình làm vậy, và bảo rằng nếu cần giải thích thêm thì hãy tìm Active Ethics
Và tôi đã đỗ
Điều này giống như nói rằng catcher không được ra tín hiệu cho pitcher
Truyền đạt thông tin là một kỹ năng mang tính con người, bổ sung thêm chiều sâu cho trò chơi, và cứ để bên làm tốt nhất giành chiến thắng
Có vẻ không quá khó để truyền khoảng 1~2 bit thông tin
Giao tiếp bí mật với đối tác là cốt lõi, nhưng việc giao tiếp đó lại không được phép bí mật
Kiểu như được giao tiếp nhưng không được giao tiếp, nên rất kỳ quặc
Ví dụ có thể đẩy chiếc bàn nhỏ qua rào chắn một cái thật nhanh hoặc đẩy chậm để biểu thị điều gì đó
Người ở góc trên bên phải video đã chuyển bài như vậy ở lần thứ nhất và thứ hai
Có một bài viết năm 2008 giới thiệu bài báo năm 2001 về các tấn công timing như thế này: https://lwn.net/Articles/298833/
Bài báo được trích dẫn là “Timing analysis of keystrokes and timing attacks on SSH”, phân tích rằng thông tin timing của phím bấm làm rò rỉ thông tin về chuỗi phím đã nhập
Trong phân tích chi tiết hơn, mỗi cặp phím bấm làm lộ khoảng 1 bit thông tin về nội dung, và vì entropy của mật khẩu vào khoảng 4~8 bit mỗi ký tự, lượng thông tin này có thể khá đáng kể
Tôi đã nghĩ vấn đề này đã được sửa từ lâu, và tưởng rằng bản sửa đã được đưa vào khoảng năm 2012, nên khá ngạc nhiên khi biết nó vẫn chưa được giải quyết
Một ngày nào đó có thể sẽ phải dùng các gói tin được điền sẵn bằng dữ liệu ngẫu nhiên để che giấu thao tác gõ phím.
Không hẳn là steganography, nhưng cũng khá gần, và có vẻ cũng có thể dùng để khiến việc phân tích lưu lượng trở nên khó hơn hoặc bất khả thi.
Nếu là đường truyền chuyên dụng, không quá khó để luôn đẩy dữ liệu mã hóa hoàn toàn qua đường truyền ở mức sử dụng tối đa, rồi chỉ chèn dữ liệu thật vào khi cần.
Có nghiên cứu cho mô hình ngôn ngữ viết lại một văn bản vỏ bọc vô hại, nhưng thay đổi phân phối xác suất dùng để lấy mẫu từ theo một độ méo entropy tối thiểu được suy ra từ khóa.
Phía nhận dùng cùng mô hình và khóa thì có thể giải mã văn bản vỏ bọc trở lại thành bản mã; cách này cũng áp dụng được cho hình ảnh.
https://openreview.net/forum?id=HQ67mj5rJdR
Chúng liên tục phát các con số ra khắp thế giới, và chỉ khi những con số đó có ý nghĩa với ai đó thì chúng mới trở nên có nghĩa.
Họ làm vậy dù biết rõ các cơ quan tình báo trên thế giới vẫn đang nghe.
Làm tôi nghĩ đến các trình giả lập terminal hiện đại như Warp trên macOS.
Ví dụ tôi tự hỏi liệu chúng có nhận toàn bộ đầu vào cục bộ rồi gửi thành một khối sang host từ xa không.
Làm vậy có thể khiến một số đầu vào ở chế độ raw thực thi trên host từ xa bị hỏng, nhưng có lẽ cũng có thể phát hiện các tình huống đó rồi chuyển sang luồng phím thô.
[1]: https://warp.dev
pty từ xa có thể ở chế độ theo dòng, hoặc cũng có thể ở chế độ raw.
Các terminal có tích hợp shell đặc biệt thường cũng cần cài phần tích hợp đó trên host từ xa, và một số xử lý việc này khá trong suốt.
Vì vậy mosh có thể hoạt động tốt hơn SSH thuần trên các kết nối có độ trễ lớn.
Tuy nhiên tính năng này có lẽ sẽ không áp dụng cho mosh.
Một số tính năng bảo mật cụ thể, chẳng hạn phòng chống tấn công timing, có thể được công cụ mới xử lý tốt hơn và không có trong các công cụ tiêu chuẩn cũ.
Nhưng khả năng cao hơn nhiều là công cụ mới sẽ thiếu các tính năng bảo mật khác, và thêm “AI” thì bề mặt tấn công cũng tăng lên rất nhiều.
Nói thật, các tuyên bố về quyền riêng tư của Warp cũng khó tin.
Các công cụ xử lý ngôn ngữ tự nhiên ngày nay gần như đều nghiêng về giải pháp cloud, và như vậy khả năng bảo vệ quyền riêng tư gần như lập tức tiến về 0.
Tôi tò mò mối đe dọa mà tính năng này giảm thiểu là gì.
Nếu biết mẫu gõ phím của mục tiêu, có thể dùng dữ liệu đó để khôi phục nội dung.
Có thể thu thập mẫu bằng cách khiến mục tiêu nhập vào một website do tôi kiểm soát trên trình duyệt bật JavaScript, hoặc ghi âm tiếng gõ phím.
Gần đây, một số streamer trực tuyến còn bị tấn công đánh cắp mật khẩu bằng mô hình AI học tiếng gõ bàn phím.
Tính năng này có vẻ thêm nhiễu để ngăn điều đó.
http://www.cs.berkeley.edu/~dawnsong/papers/ssh-timing.pdf [2001]
Khi thêm machine learning, độ chính xác giải mã từ âm thanh đã cải thiện đáng kể, nên ở những nơi không an toàn về mặt vật lý thì nên dùng bàn phím yên tĩnh.
https://arstechnica.com/gadgets/2023/08/type-softly-research...
Ví dụ, người dùng thường gõ mật khẩu nhanh hơn các đầu vào khác, nên trong các thao tác như
sudo, có thể nhìn vào số lượng phím được gửi dồn một lần để đoán độ dài mật khẩu.Trường hợp sử dụng trong chính bài báo này không phải là mối đe dọa bảo mật, nhưng có thể diễn giải là rò rỉ thông tin.
Tôi tò mò nó thêm bao nhiêu độ trễ.
Đặc biệt, độ trễ khó dự đoán là một trong những yếu tố gây căng thẳng lớn nhất trong công việc phát triển phần mềm.
Khi chỉ truyền một lượng nhỏ dữ liệu, lưu lượng tương tác được gửi theo khoảng thời gian cố định, mặc định là 20ms.
[1]
Các công cụ như Mosh giúp giảm độ trễ cảm nhận khá nhiều.
Mosh hiển thị ngay khi phím của người dùng được ghi nhận cục bộ, và hiển thị màu mờ để cho biết vòng khứ hồi chưa kết thúc.
Lần cuối tôi xem thì là như vậy, hoặc có lẽ là gạch chân.
Khi vòng khứ hồi kết thúc, ký tự được hiển thị bình thường.
[1] Nếu yếu tố gây căng thẳng lớn nhất trong phát triển phần mềm là độ trễ gõ phím thì nghe như bạn khá may mắn.
[2]: https://mosh.org
Liên kết commit thực tế: https://github.com/openssh/openssh-portable/commit/7603ba712...
Có vẻ một số bên đo timing của packet để phát hiện shell hands-on-keyboard trên mạng; tôi tò mò thay đổi này sẽ cản trở kiểu phát hiện đó đến mức nào
Tôi thật sự nghĩ đó là một cách tiếp cận bảo mật sai lầm
Biết được một script tự động có đăng nhập vào thiết bị hay không thì cũng hữu ích, nhưng một thiết kế tốt hơn có thể khiến thông tin đó không còn quan trọng