3 điểm bởi GN⁺ 2025-12-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • Là thư viện Python tự động phát hiện che đen không đúng cách trong tài liệu PDF, nhận diện các trường hợp văn bản chỉ bị phủ bởi hình chữ nhật màu đen
  • Được Free Law Project phát triển để giải quyết một vấn đề lặp đi lặp lại được phát hiện trong quá trình thu thập hàng triệu tệp PDF
  • Có thể chạy từ dòng lệnh hoặc trong mã Python, và trả kết quả dưới dạng JSON hoặc đối tượng Python
  • Bên trong sử dụng PyMuPDF để phân tích hình chữ nhật, văn bản và thông tin màu sắc của PDF nhằm xác định việc che đen có thực sự ẩn văn bản hay không
  • Có giá trị cao như một công cụ kiểm chứng tự động nhằm ngăn lộ thông tin cá nhân trong tài liệu pháp lý hoặc tài liệu công khai

Tổng quan

  • x-ray là thư viện Python dùng để phát hiện che đen (redaction) sai cách trong tệp PDF
    • Khi người dùng nhập đường dẫn PDF, công cụ sẽ tìm các vùng mà việc che đen chưa được thực hiện đúng
    • Kết quả được xuất ra dưới dạng JSON theo từng trang, bao gồm tọa độ (bbox) và văn bản (text) của vùng đó

Bối cảnh phát triển

  • Free Law Project đã phát hiện nhiều tài liệu che đen không đúng cách trong quá trình thu thập hàng triệu tệp PDF
    • Một số người dùng không xóa văn bản mà dùng cách phủ bằng hình chữ nhật màu đen hoặc tô sáng
    • Trong trường hợp này, nếu chọn phần văn bản bên dưới hình chữ nhật thì nội dung gốc vẫn bị lộ nguyên vẹn
  • Để xác định mức độ phổ biến của vấn đề này, công cụ x-ray đã được tạo ra

Cách sử dụng

  • Cài đặt
    • Có thể cài bằng lệnh pip install x-ray hoặc uv add x-ray
  • Chạy từ dòng lệnh
    • Chạy theo dạng xray path/to/file.pdf để nhận kết quả JSON
    • Khi nhập URL, công cụ sẽ tải PDF từ xa rồi tiến hành kiểm tra
    • Để kiểm tra nhiều URL cùng lúc, dùng xargs -n 1 xray < urls.txt
  • Dùng trong mã Python
    • Gọi xray.inspect("file.pdf") để nhận kết quả dưới dạng đối tượng Python
    • Nếu giá trị đầu vào là chuỗi thì được xử lý là tệp cục bộ, nếu bắt đầu bằng https:// thì là URL, còn bytes thì được xử lý là PDF trong bộ nhớ
    • Nếu truyền đường dẫn tệp dưới kiểu bytes thì sẽ không hoạt động

Nguyên lý hoạt động

  • Bên trong, công cụ phân tích PDF bằng PyMuPDF
    1. Tìm các hình chữ nhật (rectangle) trong PDF
    2. Tìm các ký tự (letter) ở cùng vị trí
    3. Kết xuất hình chữ nhật thành ảnh
    4. Nếu hình chữ nhật được tô bằng một màu duy nhất, công cụ sẽ đánh giá đó là che đen sai cách
  • Do cấu trúc PDF phức tạp nên rất khó phát hiện hoàn hảo, nhưng dự án vẫn đang được cải tiến liên tục
  • Dự án được duy trì bằng quyên góp và tài trợ

Đóng góp và phát hành

  • Có thể xem các trường hợp chưa được hỗ trợ hoặc yêu cầu cải tiến thông qua danh sách issues trên GitHub
  • Trước khi đóng góp lần đầu, cần ký Contributor License Agreement (CLA)
  • Việc phát hành được tự động hóa thông qua GitHub Actions, và khi phát hành thủ công có thể dùng lệnh poetry publish --build

Giấy phép

  • Được phát hành theo giấy phép BSD, có thể tự do tích hợp vào các dự án khác
  • Hoan nghênh Pull Request và đề xuất tính năng, có thể chỉnh sửa trực tiếp trên giao diện web GitHub

1 bình luận

 
GN⁺ 2025-12-24
Ý kiến trên Hacker News
  • Khi làm việc tại Free Law Project, tôi đã tham gia nhiều dự án phức tạp kéo dài nhiều năm, nhưng dự án X-ray này là trường hợp gây tiếng vang nhất
    Chúng tôi tạo ra X-ray để phân tích hàng triệu tài liệu trên CourtListener, đồng thời nhằm giúp mọi người nhận thức được vấn đề này
    Chúng tôi đã phân tích hàng triệu tài liệu chỉ trong vài phút bằng một S3 batch job, nhưng phần thực sự khó là tổng hợp kết quả và báo cáo thì vẫn còn ở phía trước

    • Xem nghiên cứu bảo mật PDF của Argelius Labs, họ nói có thể thực hiện glyph spacing attack để ước lượng độ dài từ chỉ dựa vào độ dài phần bị che bằng hộp đen
      Tôi cũng tò mò không biết X-ray có tận dụng kiểu rò rỉ font metrics này hay không
    • Nếu có thể tái hiện kerning của font và dựng lại ở mức pixel, có lẽ sẽ đoán được từ khá chính xác
      Ví dụ, oioioi và oooiii có độ rộng khác nhau tùy font
  • Hôm nay tôi mới xem khoảng 10% số file được công bố, nhưng chẳng hạn EFTA00037069.pdf có con trỏ /Prev, nghĩa là phiên bản trước đó vẫn được nhúng bên trong PDF
    Đây chỉ là một chỉnh sửa nhỏ, nhưng rất có thể các file khác cũng gặp tình trạng tương tự
    Có thể tự kiểm tra bằng lệnh qpdf --show-object=trailer
    Tôi nghĩ kiểu biên tập cẩu thả này có thể là cố ý chứ không chỉ là sai sót

    • Tôi đã tự kiểm tra, lịch sử chỉnh sửa của file đó chỉ đơn giản là mỗi trang được thêm số trang
      Bản gốc vốn đã là tài liệu được làm phẳng hoàn toàn
    • Cũng không có gì lạ khi những người được giao làm việc này thậm chí còn không biết cả hướng dẫn cơ bản
    • Thực tế là họ gọi đại người vào làm công việc redaction, nên rất có thể vấn đề nằm ở sự thiếu kinh nghiệm
  • Càng nghĩ tôi càng thấy thông tin kerning của font có thể là một điểm yếu lớn của redaction
    Chỉ từ vị trí của văn bản quanh hộp đen cũng có thể suy ra độ dài và hình dạng của từ bị che
    Nếu biết thuật toán render, có lẽ còn có thể brute-force để suy ra văn bản thật
    Tôi tự hỏi liệu đã có ai nghiên cứu vấn đề này chưa

    • Sẽ hay nếu có một loại font tự động ngẫu nhiên hóa kerning
      Theo cách đó, cùng một từ nhưng khoảng cách sẽ khác nhau giữa các tài liệu
    • Gần đây cũng từng có trường hợp trích xuất thông tin từ các phiên chat được mã hóa của LLM bằng cách phân tích kích thước gói tin và thời điểm truyền
      Đây là một dạng tấn công side-channel, khá giống với vấn đề này
    • Điều đó còn tùy vào độ dài của phần redaction và mức độ có thể dự đoán
      Nếu ngắn và theo ngữ cảnh chỉ có thể là “yes” hoặc “no” thì rất dễ đoán, nhưng tên riêng hoặc câu dài sẽ khó hơn nhiều
  • PDF vẫn bị dùng rất rộng rãi dù nó vẫn có quá nhiều khiếm khuyết nền tảng với tư cách là tài liệu số, điều này thật đáng tiếc

  • Đây là câu hỏi đơn giản, nhưng tôi muốn biết chính xác mục đích của redaction trong những đợt công bố tài liệu như thế này là gì
    Tôi cũng không hiểu vì sao phải duy trì tính ẩn danh
    (Chỉnh sửa) Nghĩ đến việc có thể có cả những người vô tội bị liên quan thì tôi hiểu hơn

    • Về mặt pháp lý, chỉ được phép che thông tin về danh tính nạn nhân, điều tra đang diễn ra, tài liệu lạm dụng tình dục trẻ em, hoặc thông tin liên quan đến an ninh quốc gia
      Việc che vì lý do tổn hại danh tiếng hay chính trị là bị cấm
      Nhưng có nhiều lo ngại rằng việc redaction trên thực tế không tuân thủ tiêu chuẩn này
    • WikiLeaks có quan điểm chỉ che những thông tin có thể dẫn đến nguy hại thân thể cho cá nhân
      Ví dụ như công bố tọa độ GPS có thể làm phát sinh nguy cơ bị ném bom
    • Các nạn nhân nói rằng họ không muốn redaction nếu đó là để bảo vệ thủ phạm
      Việc truy cứu trách nhiệm mới là điều quan trọng hơn
    • Mục đích là để bảo vệ danh tính của nạn nhân, nhân chứng và người cung cấp thông tin
    • Trong hồ sơ điều tra dài hạn thường có nhiều tố cáo sai hoặc thông tin sai lệch, nên cần bảo vệ quyền riêng tư của người vô tội
      Nhưng vụ việc lần này quá quan trọng nên việc công khai là điều không thể tránh khỏi
  • Khi công bố PDF đã redacted, có vẻ quy trình cơ bản phải là vẽ hình chữ nhật màu đen rồi raster hóa thành ảnh 🤷

    • Tôi điều hành một doanh nghiệp liên quan đến anti-screenshot, và kiểu thất bại redaction này thật sự rất phổ biến
      Chỉ phủ một hộp đen lên trên không có nghĩa là dữ liệu đã biến mất
      Tôi thường xuyên thấy kiểu ngộ nhận này trong môi trường compliance
    • Nhưng trong một số trường hợp, tài liệu vẫn phải đáp ứng yêu cầu có thể tìm kiếm được, nên không phải lúc nào cũng có thể chuyển thành ảnh
  • Nếu dùng Adobe Pro đúng cách thì có thể xóa vĩnh viễn nội dung (redact) khỏi PDF
    Sự việc lần này chỉ là một sai lầm nghiệp dư do không biết dùng đúng trình chỉnh sửa PDF
    Đây là hậu quả của việc bỏ qua quy trình mà hàng nghìn luật sư và chuyên viên pháp lý đã dùng suốt hàng chục năm
    Trước đây người ta hay kẻ vạch đen trên giấy rồi dùng bản in làm bản cuối cùng, nên có lẽ họ đã làm việc với tư duy từ thời đó

    • Có thể họ nghĩ PDF cũng giống giấy, nên chỉ cần phủ hộp đen lên là xong
      Vì không thể chọn văn bản nên họ tưởng rằng nội dung đã được che kín
      Hoặc cũng có thể họ cố tình làm theo cách này rồi giả vờ đó là nhầm lẫn
    • Các luật sư hay điều tra viên của chính phủ liên bang Mỹ được đào tạo rất kỹ về redaction
      Vì vậy nhiều người cho rằng đây không phải lỗi vô ý đơn thuần mà là một kiểu malicious compliance có chủ đích
  • Điều đáng ngạc nhiên là ngay cả trình xem PDF trong trình duyệt cũng hiển thị được thông tin đã redacted
    Mở tài liệu này trong Brave (Linux), rồi sao chép dòng đầu của đoạn 90, bạn sẽ thấy văn bản bị che vẫn được dán nguyên vẹn

    • Đây là một trong những trường hợp điển hình của redaction sai cách mà X-ray có thể phát hiện
  • Thật thú vị khi thấy khái niệm ediscovery (công bố chứng cứ điện tử) đang lan tới cả công chúng phổ thông

  • Người trong ngành công nghệ sẽ ngạc nhiên nếu biết những người ngoài kỹ thuật mù công nghệ đến mức nào
    Điều đó làm tôi nhớ lại thời mà bộ phận IT trong công ty từng được xem như vị thần toàn năng