Các lỗ hổng dai dẳng trên Lightning Network vẫn cần sửa chữa |
话说区块链
2021-01-19 02:36
本文约3346字,阅读全文需要约13分钟
Chúng tôi nhận thấy rằng Đau buồn gây ra mối đe dọa nghiêm trọng đối với các kênh "khổng lồ" lớn đang tìm cách tạo thu nhập từ Bitcoin của họ, chỉ để đóng băng tiền của họ trong một

Điều gì xảy ra khi các nút định tuyến mạng Lightning chứa đầy rác? Nói tóm lại, điều này tạo ra rất nhiều vấn đề đau đầu cho các nút định tuyến. Những gì đã từng là một hệ thống thanh toán toàn cầu, trơn tru có thể bị khóa vào tay của một người viết kịch bản hiểu biết mà không tốn nhiều công sức.

Trong một nhóm nhỏ các nút định tuyến, chúng tôi đã thử nghiệm thành công cuộc tấn công bằng tiền và trình diễn cuộc tấn công "Đau buồn" được mô tả bởi Joost Jager. Cuộc tấn công được mệnh danh là cuộc tấn công "đau buồn" vì nó không phải là hành vi trộm cắp tiền, nhưng nó dẫn đến việc Quỹ Flash của nạn nhân bị đóng băng: một nỗi sợ hãi lớn. Chúng tôi nhận thấy rằng cuộc tấn công Đau buồn là mối đe dọa nghiêm trọng đối với các kênh "wumbo" lớn đang tìm cách kiếm tiền bằng Bitcoin, nhưng đã bị đóng băng trong một khoảng thời gian.

Đây chủ yếu là một cuộc tấn công "đáng buồn": không mất tiền, nhưng nạn nhân có thể bị buộc phải trả tiền cho việc đóng quyền lực kênh đắt tiền. Đây là một lỗ hổng Lightning trên mainnet đã biết cần được hiểu và ưu tiên, đặc biệt là trong giai đoạn đầu của Bitcoin Lightning Network.

Xin cảm ơn Clark Burkhardt và Phillip Sheppard vì sự sẵn lòng tham gia thử nghiệm này và cảm ơn Jager vì những nỗ lực không mệt mỏi của anh ấy để thu hút sự chú ý và tầm quan trọng của vấn đề này. Jager đóng vai kẻ tấn công trong bản demo của chúng tôi, trong khi Burkhardt và Sheppard tham gia hàng ngũ với tư cách là nút định tuyến nạn nhân được kết nối.

Làm thế nào để thực hiện các hoạt động tấn công?

Kẻ tấn công làm bão hòa một kênh (hoặc các kênh) bằng các hợp đồng bị khóa thời gian (HTLC) đã băm mà không thể giải quyết dưới dạng thanh toán cuối cùng. Đây là một loại HTLC đặc biệt được gọi là hóa đơn HODL. Chỉ cần 483 trong số các HTLC chưa được giải quyết này để áp đảo kênh theo mỗi hướng. Sau khi các HTLC này vào một kênh, bất kỳ giao dịch nào sử dụng cùng hướng kênh đó là không thể, kể cả các giao dịch hợp tác để đóng kênh đó.

Về lý thuyết, kẻ tấn công có thể liên hệ với nạn nhân (có thể gửi tin nhắn hoặc "củ hành" qua khóa) và yêu cầu thanh toán tiền chuộc để ngăn chặn cuộc tấn công. Khi tiền chuộc được thanh toán, những kẻ tấn công có thể xóa các khoản thanh toán chưa thanh toán, do đó kết thúc cuộc tấn công. Cuộc tấn công có thể tiếp tục vô thời hạn, làm dừng tất cả hoạt động định tuyến và thanh toán trong kênh. Điều này làm đóng băng quỹ Lightning Channel.

Bằng cách sử dụng 483 HTLC theo mỗi hướng (trong và ngoài nước), có thể dừng hai hướng thanh toán trong một kênh.

Tại sao một kẻ tấn công sẽ làm một cái gì đó như thế này?

Động cơ đầu tiên xuất hiện trong đầu là yêu cầu một khoản tiền chuộc. Một cuộc tấn công như vậy gây đau đớn cho nạn nhân và ngay cả khi không có gì đảm bảo rằng cuộc tấn công sẽ dừng lại, việc trả tiền chuộc có thể hấp dẫn nạn nhân. Việc liên hệ với nạn nhân có thể gây rủi ro cho những kẻ tấn công, nhưng việc trả tiền chuộc có thể không phải là lý do duy nhất khiến những kẻ tấn công làm điều đó.

Động lực thứ hai để khởi động một cuộc tấn công đau buồn là phá vỡ sự tranh chấp định tuyến. Chặn tuyến đường của đối thủ cạnh tranh có thể làm tăng nhu cầu đối với tuyến đường do kẻ tấn công sở hữu.

Là một điểm chuẩn, hãy xem xét rằng nút Loop của Lightning Labs có nhu cầu thanh khoản liên tục và đôi khi nó trả tỷ lệ thanh toán trên một triệu (ppm) (0,25%) là 2.500 phần triệu. Theo kinh nghiệm của tôi, họ thường rút hết thanh khoản 16 triệu Satyr của mình trong khoảng hai tuần (tăng trưởng 5,2% hàng năm), nhưng có sự cạnh tranh.

Loop có thể sẵn sàng trả mức phí cao hơn (vì nguồn cung cấp thanh khoản hiện đã giảm) nếu kẻ tấn công có thể vô hiệu hóa bất kỳ tuyến đường cạnh tranh nào với mức phí thấp hơn. Giả sử Loop sẽ trả 3.000 ppm (0,3%) và vì không có kênh nào khác đang hoạt động nên thanh khoản này có thể được chi tiêu nhanh hơn. Vòng lặp có thể sử dụng thanh khoản đó một nửa thời gian, chẳng hạn như một tuần. Trong ví dụ này, tỷ lệ hoàn vốn bình thường của kẻ tấn công sẽ tăng gấp đôi lên 15,6%. Chi phí duy nhất cho kẻ tấn công là chi phí chạy tập lệnh trên kênh hiện có và chi phí tâm lý khi hành động phi đạo đức/phá hoại trên Lightning Network. Sử dụng một kênh kẻ tấn công duy nhất, một tác nhân độc hại có thể chặn khoảng chín kênh.

Những nạn nhân của cuộc tấn công này sẽ trải qua những gì?

Nạn nhân của cuộc tấn công này sẽ không thực sự biết nếu cuộc tấn công này đang xảy ra trừ khi họ thiết lập một số cảnh báo đặc biệt cho các HTLC đang chờ xử lý. Đối với người dùng Thunderhub (công cụ rất được khuyến khích), màn hình chính sẽ hiển thị biểu đồ các HTLC đang chờ xử lý cùng với cảnh báo rằng kênh chỉ có thể chứa 483 HTLC đang chờ xử lý.

Nguồn: Thunderhub

Trên thực tế, nút của tôi nhanh chóng trở nên không ổn định và gặp phải một số sự cố ứng dụng, bao gồm cả Thunderhub, ứng dụng duy nhất thông báo cho tôi về sự cố. Sau đó, nhờ bot điện tín "Số dư Satoshi" của tôi, tôi đã nhận được thông báo tắt kênh. Kênh bị tấn công sẽ tự động bị đóng! Đây không phải là một phần của thử nghiệm (Để biết thêm thông tin kỹ thuật về hợp tác vũ lực không tự nguyện, hãy xem dữ liệu lực lượng bổ sung bên dưới.)

Thanh toán thử nghiệm bằng kênh Burkhardt (salmiak) không thành công do cuộc tấn công. Cảnh báo này báo cáo rằng nút của Burkhardt đang ngoại tuyến mặc dù nó đang trực tuyến. Nguồn: ThunderHub.

Những gì nạn nhân có thể làm để ngăn chặn cuộc tấn công

Khi cuộc tấn công đã bắt đầu, về cơ bản nạn nhân không thể làm gì để ngăn chặn nó. Giải pháp thay thế duy nhất để ngăn chặn một cuộc tấn công đang diễn ra là đóng mạnh kênh đang bị tấn công, điều đó có nghĩa là những kẻ khủng bố sẽ giành chiến thắng.

Để tăng thêm sự xúc phạm cho thương tích, việc buộc đóng một kênh sẽ đẩy khoản thanh toán chưa được giải quyết vào dữ liệu giao dịch trực tuyến, kích hoạt giao dịch trực tuyến thứ hai để buộc người khởi tạo phải đóng. Với tốc độ 50 sat/vbyte và 483 giao dịch trực tuyến, đây dễ dàng là mức giá 1 triệu sat để buộc đóng một kênh đang bị tấn công ($368 phí đóng kênh theo giá hiện nay). Nhiều giao dịch trên chuỗi sẽ chỉ xảy ra nếu đầu ra vượt quá giới hạn "bụi" thanh toán tối thiểu. (Xem ví dụ trên testnet.)

Người khởi tạo kênh Lightning trả phí đóng.

chữ

 https://t.co/z6mAGZxvrC.Giá chốt càng ngày càng đắt.

Làm thế nào để ngăn chặn các cuộc tấn công

Jager đang làm việc trên một chương trình chứng minh khái niệm để giúp cô lập và đánh bại những kẻ tấn công. Anh ấy gọi chương trình của mình là "Circuit Breaker." Bộ ngắt mạch hoạt động ở cấp độ mạng, điều này không may có nghĩa là mọi người phải tham gia để việc này có hiệu quả.

Ngoài ra, vấn đề này cần được ưu tiên và thu hút sự chú ý của một kỹ sư/nhà phát triển tận tâm để tìm ra giải pháp tốt hơn. Trong bản tin Bitcoin Optech (số 122 hoặc 126) cũng có một cuộc thảo luận hay về việc sửa đổi giao thức.

Cuộc tấn công này có thể được thực hiện ngày hôm nay. Một phép màu chưa được sử dụng một cách ác ý. Điều này phản ánh sự nhiệt tình của những người sử dụng Lightning ngày nay để nó có thể trở thành một mạng thanh toán mở, toàn cầu. Vui lòng chia sẻ bài viết này khi bạn thấy phù hợp để khuyến khích và truyền cảm hứng cho nhiều công việc hơn để giải quyết vấn đề này trước khi tác hại thực sự xảy ra.

Thông tin kỹ thuật bổ sung về lực lượng đóng cửa không tự nguyện

Đây là nhật ký từ một nút đang chạy LND 0.11 khi xảy ra quá trình tắt máy không bắt buộc ở trên:

26-11-2020 21:24:47.374 [ERR] HSWC: ChannelLink(657759:561:0): Không có liên kết: ChannelPoint(c37bec006b18df172698a84739ca47128935e0a8666fecd1a843e49b01db207c: 0): Đã nhận được lỗi từ máy ngang hàng: chan_id=7c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc3, ERR= Cam kết bị từ chối: commit_height= 455, invalid_commit_sig=3044022076fd65191eb6305b723fa6012be378413b6326e2786c38db58b4c02e1f3999d202207605ca31de8b4c5b1d9cd20dc1 581dfa2383e0b 4e06c8ad4f718ab5c434d8cf5, cam kết_tx = 02000000017c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc300000000008 a792e8002210d00 00000000002200201031cf10a1efef261edd3d0a1a6a953b27bc25bd7150bb2b07afdc69805e02157213000000000000160014de650929042be f58b71783ae1a44834 a902a8f2d542ca720, sig_hash=4e0fb804c74376020e4c44a60969b9206eb0aaa9a89b76017d60f23ad5cf63e5, lỗi: lỗi từ xa

Nhật ký hiển thị "invalid_commit_sig", đây là sự cố đã biết trong LND. Có lẽ điều này có thể đã xảy ra khi kết nối lại và không phải là kết quả trực tiếp của việc nói lắp kênh. Thật không may, số lượng HTLC đang chờ xử lý khiến nó có nhiều khả năng xảy ra hơn. Jager đã giúp giải thích quy trình: chặn kênh -> vòng lặp thanh toán vô hạn (lỗi) -> tắt nút -> kết nối lại -> tín hiệu xác nhận không hợp lệ (lỗi) -> kênh buộc phải đóng.

Lỗi vòng lặp "vô tận" là một lỗi đã biết xảy ra khi đạt đến giới hạn HTLC và các HTLC bổ sung được gửi. LND sẽ tiếp tục cố gắng thanh toán định kỳ thay vì kết thúc các lỗi thanh toán. Để khắc phục lỗi này, hãy xem vấn đề LND #4656.

话说区块链
作者文库