Hook
Hãy tưởng tượng: Bạn mở App Store, tải một ứng dụng trông có vẻ vô hại – một game giải đố, một công cụ chỉnh sửa ảnh. Ứng dụng yêu cầu quyền truy cập vào thư viện ảnh của bạn. Bạn nghĩ “cũng hợp lý” và nhấn “Cho phép”. Vài ngày sau, toàn bộ số Bitcoin, Ethereum, hay bất kỳ đồng coin nào bạn đang giữ trong ví di động biến mất. Không có giao dịch đáng ngờ trên blockchain, không có lỗi smart contract. Chỉ có một thứ: một bức ảnh chụp màn hình seed phrase của bạn – thứ mà bạn nghĩ là an toàn nhất.
Đây không phải là kịch bản viễn tưởng. Nó đã xảy ra. Và tôi, với tư cách một người dành hàng năm trời đào sâu vào mã nguồn của các giao thức blockchain, có thể nói với bạn: đây là một cuộc tấn công mà tôi đã thấy trước từ lâu.
Context
SparkKitty là một phần mềm độc hại – một spyware – được phát hiện đang hoạt động trên cả iOS và Android. Nó lợi dụng điểm yếu lớn nhất của người dùng crypto: thói quen lưu trữ seed phrase (cụm từ khôi phục ví) dưới dạng ảnh chụp màn hình. Cơ chế hoạt động đơn giản đến mức gây sốc: sau khi xin quyền truy cập thư viện ảnh (thường dưới vỏ bọc “chỉnh sửa ảnh” hoặc “tạo sticker”), SparkKitty quét tất cả ảnh trên thiết bị, sử dụng công nghệ OCR (nhận dạng ký tự quang học) để tìm kiếm các chuỗi từ 12 hoặc 24 từ – dấu hiệu nhận biết của seed phrase. Khi tìm thấy, nó gửi dữ liệu về máy chủ của kẻ tấn công. Từ đó, kẻ tấn công có thể import seed phrase vào bất kỳ ví nào và rút sạch tài sản.
Điều đáng sợ hơn: SparkKitty đã vượt qua được quy trình kiểm duyệt của cả Apple App Store và Google Play. Điều này có nghĩa là nó đã được “chứng nhận” bởi hai nền tảng di động lớn nhất thế giới. Đối với người dùng thông thường, đây là một tín hiệu cho thấy “ứng dụng an toàn”. Nhưng đối với tôi, đây là minh chứng cho một sự thật phũ phàng: lòng tin mù quáng vào các cửa hàng ứng dụng là một lỗ hổng chết người.
Hãy nhìn vào bức tranh lớn hơn. Trong thị trường tăng trưởng hiện tại, khi mọi người đổ xô vào crypto, các nhà phát triển phần mềm độc hại cũng đang tận dụng cơ hội. Họ không cần phải khai thác lỗi zero-day hay hack hợp đồng thông minh phức tạp. Họ chỉ cần khai thác thói quen của con người – và seed phrase là mục tiêu hoàn hảo.
Core
Bây giờ, tôi sẽ đi vào phân tích kỹ thuật. Không phải để giải thích cách malware hoạt động – điều đó quá tầm thường. Tôi muốn chỉ ra tại sao cuộc tấn công này lại hiệu quả đến vậy và tại sao nó sẽ còn tồn tại lâu dài.
1. OCR: Công nghệ cũ, nhưng mục tiêu mới
OCR không phải là công nghệ mới. Nó đã tồn tại hàng thập kỷ. Nhưng việc áp dụng nó vào việc đánh cắp seed phrase là một bước tiến tự nhiên. Hãy nghĩ về điều này: seed phrase thường là một chuỗi các từ tiếng Anh phổ biến (từ danh sách BIP39). OCR có độ chính xác rất cao với văn bản in hoặc viết tay rõ ràng. Và bức ảnh chụp màn hình seed phrase thường có độ tương phản cao, rất dễ đọc.
2. Quyền truy cập thư viện ảnh: Cánh cửa mở rộng
Hầu hết các ứng dụng đều xin quyền truy cập thư viện ảnh vì những lý do chính đáng: để tải ảnh đại diện, để chỉnh sửa ảnh, để gửi ảnh. Người dùng crypto cũng không ngoại lệ. Họ có thể đã chụp ảnh seed phrase, rồi xóa ảnh đó (hoặc tưởng là đã xóa). Nhưng thực tế, nhiều hệ điều hành vẫn giữ ảnh trong thùng rác hoặc trong bộ nhớ cache. SparkKitty có thể quét cả những ảnh đã bị “xóa” nếu chúng vẫn còn trong bộ nhớ tạm.
3. Tại sao Apple và Google không phát hiện?
Đây là câu hỏi mà nhiều người đặt ra. Câu trả lời nằm ở kỹ thuật che giấu. SparkKitty có thể sử dụng mã hóa động: mã độc chỉ được tải về và thực thi sau khi ứng dụng đã vượt qua kiểm duyệt. Hoặc nó có thể sử dụng phân tách chức năng: ứng dụng ban đầu chỉ là một ứng dụng vô hại, nhưng sau một bản cập nhật từ xa, nó mới kích hoạt tính năng quét ảnh. Đây là một kỹ thuật đã được biết đến trong giới bảo mật, nhưng các cửa hàng ứng dụng vẫn chưa có biện pháp đối phó triệt để.
4. Mức độ thiệt hại tiềm năng
Một seed phrase bị lộ đồng nghĩa với việc mất toàn bộ tài sản trong ví. Không có cách nào để khôi phục. Và vì seed phrase thường được dùng để khôi phục nhiều ví (nếu người dùng sử dụng cùng một seed cho nhiều tài khoản), thiệt hại có thể lan rộng. Đây là rủi ro cao nhất mà một người dùng crypto có thể gặp phải, cao hơn nhiều so với việc bị hack thông qua một lỗi smart contract (vì lỗi đó thường chỉ ảnh hưởng đến một giao thức cụ thể).
Dựa trên kinh nghiệm kiểm toán của tôi, tôi nhận thấy rằng phần lớn các vụ mất tài sản lớn trong crypto đều xuất phát từ việc seed phrase bị lộ, không phải từ lỗi kỹ thuật blockchain. SparkKitty chỉ là một công cụ mới trong kho vũ khí của kẻ tấn công.
Contrarian
Bạn có thể nghĩ rằng: “Tôi không bao giờ chụp ảnh seed phrase, nên tôi an toàn.” Sai lầm. Đây là suy nghĩ phổ biến nhưng nguy hiểm. Hãy xem xét các tình huống sau:
- Bạn có thể đã chụp ảnh seed phrase từ nhiều năm trước và quên mất? Nhiều người dùng mới thường được hướng dẫn chụp ảnh để lưu trữ an toàn. Bức ảnh đó có thể vẫn còn trong thư viện ảnh của bạn, được đồng bộ lên iCloud hoặc Google Photos.
- Bạn có thể đã nhận một ảnh chụp màn hình seed phrase từ người khác qua ứng dụng chat? Ảnh đó cũng có thể bị quét.
- Ứng dụng độc hại không chỉ quét ảnh hiện tại mà còn quét ảnh trong tin nhắn, ảnh đã xóa gần đây. Hệ điều hành thường lưu trữ ảnh đã xóa trong một thư mục đặc biệt trong 30 ngày.
Điểm mù lớn nhất: Niềm tin vào khả năng tự bảo vệ của người dùng. Hầu hết các bài viết bảo mật đều đổ lỗi cho người dùng: “Đừng chụp ảnh seed phrase!” Nhưng điều này không thay đổi thực tế. Con người mắc sai lầm. Họ mệt mỏi, họ vội vàng. Một người dùng kỷ luật vẫn có thể vô tình để lộ seed phrase.
Quan điểm phản trực giác của tôi: SparkKitty không phải là mối đe dọa lớn nhất. Mối đe dọa lớn nhất là suy nghĩ “tôi thông minh hơn kẻ tấn công”. Khi bạn nghĩ rằng mình không bao giờ mắc sai lầm, bạn sẽ chủ quan. Và đó là lúc kẻ tấn công chờ đợi.
Tôi đã thấy trước điều này. Năm 2017, khi phân tích Kyber Network, tôi phát hiện ra rằng lỗ hổng oracle không phải là vấn đề kỹ thuật, mà là vấn đề giả định về hành vi người dùng. Cũng tương tự, SparkKitty không khai thác lỗi blockchain, nó khai thác lỗi trong thói quen con người.
Takeaway
Vậy, bạn có thể làm gì? Không, đừng chỉ đơn giản là “xóa ảnh seed phrase” – đó là điều hiển nhiên. Hãy nghĩ xa hơn.
- Sử dụng hardware wallet (ví cứng) – seed phrase không bao giờ chạm vào thiết bị di động của bạn.
- Sử dụng ví MPC (Multi-Party Computation) – seed phrase được chia nhỏ và không bao giờ được lưu trữ toàn bộ ở một nơi.
- Kiểm tra quyền truy cập thư viện ảnh của tất cả ứng dụng trên điện thoại. Hãy thu hồi quyền không cần thiết.
- Bảo vệ ảnh của bạn bằng mật khẩu hoặc xóa vĩnh viễn bằng ứng dụng xóa an toàn (file shredder).
Nhưng trên hết, hãy nhớ rằng: blockchain là an toàn. Còn con người thì không. Và kẻ tấn công luôn nhắm vào mắt xích yếu nhất. SparkKitty chỉ là một mảnh ghép. Tôi có thể dự đoán rằng sẽ còn nhiều biến thể tinh vi hơn xuất hiện trong tương lai – ứng dụng giả mạo ví nổi tiếng, ứng dụng “cold wallet” giả trên app store, thậm chí là tấn công qua iMessage hay WhatsApp.
Câu hỏi cuối cùng: Bạn có sẵn sàng thay đổi thói quen trước khi mọi thứ biến mất? Tôi đã thấy trước. Còn bạn?