Bỏ qua tới nội dung chính
Quay lại tin tức

Show HN: Airgap-check – Công cụ phát hiện những dữ liệu ứng dụng AI âm thầm tải về khi ngoại tuyến

Hacker News AI· humanethq· 9/11/2026general

Đường dẫn bài viết: https://github.com/humanethq/airgap-check Đường dẫn bình luận: https://news.ycombinator.com/item?id=50431705 Điểm: 1 Số bình luận: 0

Xác định các nội dung ứng dụng AI tải về hoặc cố gắng kết nối khi ngắt kết nối mạng. Lý do Một giả định phổ biến hiện nay là: chỉ cần trỏ URL gốc của LLM tới một phiên bản vLLM hoặc Ollama cục bộ, ứng dụng đã sẵn sàng vận hành trên mạng ngoại tuyến (chẳng hạn như một VPC cách ly hoàn toàn, mạng y tế hoặc quốc phòng, hoặc một container không có kết nối internet). Trên thực tế, nhiều thư viện vẫn tự động tải dữ liệu trong lần sử dụng đầu tiên: bảng xếp hạng bộ tách từ (tokenizer ranks), trọng số nhúng ONNX, kho ngữ liệu, bảng giá hoặc dữ liệu đo lường từ xa (telemetry). Trong môi trường ngoại tuyến, các lệnh gọi này sẽ báo lỗi ngay lần đầu thực thi hoặc rơi vào trạng thái treo hàng chục giây do cơ chế thử lại. Hiện tượng này không phải là lỗi của các thư viện nói trên, do cơ chế hoạt động của chúng là tải về một lần và lưu vào bộ nhớ đệm. Vấn đề chỉ bộc lộ khi hệ thống mất kết nối mạng. Công cụ airgap-check giúp phát hiện sớm các nguy cơ này trước khi triển khai thực tế. Tính năng hoạt động Quét tĩnh (Static scan): Đọc các tệp kê khai (requirements.txt, pyproject.toml, package.json, Cargo.toml), rà soát các mẫu mã lệnh (nltk.download(), from_pretrained(), tiktoken.get_encoding(), whisper.load_model(), next/font/google) và phân loại các khóa trong tệp .env. Hệ thống chỉ đọc tên khóa; các giá trị bí mật hoàn toàn không bị đọc hoặc ghi lại. Tùy chọn --run: Khởi chạy ứng dụng bằng lệnh docker run --rm --network none kết hợp với cơ chế bộ lọc DNS (DNS sinkhole) và can thiệp socket (socket hooks), đồng thời ghi lại toàn bộ các nỗ lực truy vấn và kết nối mạng. Tùy chọn --fix: In ra các dòng cấu hình Dockerfile (bao gồm cờ biến môi trường ngoại tuyến và lệnh nạp sẵn dữ liệu khi đóng gói - build-time pre-warming) để tùy biến cho hình ảnh vùng chứa (container image) tương ứng. Chỉ sử dụng thư viện tiêu chuẩn của Go. Tùy chọn --run yêu cầu môi trường Docker. Cài đặt # macOS và Linux curl -fsSL https://raw.githubusercontent.com/humanethq/airgap-check/main/install.sh | sh # Với Go 1.22 trở lên (hỗ trợ cả Windows) go install github.com/humanethq/airgap-check/cmd/airgap-check@latest # Từ mã nguồn git clone https://github.com/humanethq/airgap-check.git cd airgap-check && make build && ./bin/airgap-check --help Cách sử dụng # Quét tĩnh airgap-check /path/to/repo # Quét tĩnh kèm đoạn cấu hình Dockerfile gợi ý airgap-check --fix /path/to/repo # Chạy trong container không có mạng airgap-check --run /path/to/repo # Sử dụng hình ảnh vùng chứa tùy chỉnh và bộ kiểm thử sơ bộ (smoke test) các luồng mã lệnh airgap-check --run --image my-app:latest --run-cmd "python3 -m pytest tests/smoke_test.py" /path/to/repo # Xuất kết quả dạng định dạng máy đọc airgap-check --json /path/to/repo Ví dụ kết quả đầu ra của tùy chọn --fix (rút gọn) Lưu ý trước khi áp dụng: trường hợp ứng dụng tải các mô hình từ Hugging Face, cần thực hiện nạp sẵn vào bộ đệm trong quá trình dựng hình ảnh (build time) trước khi thiết lập HF_HUB_OFFLINE=1 và TRANSFORMERS_OFFLINE=1. Nếu không có bộ nhớ đệm sẵn sàng, ứng dụng sẽ gặp lỗi ngay khi khởi động thay vì rơi vào trạng thái treo. # --- BEGIN AIR-GAP & TELEMETRY REMEDIATION --- ENV DO_NOT_TRACK=1 \ NEXT_TELEMETRY_DISABLED=1 \ ANONYMIZED_TELEMETRY=False \ CHROMA_TELEMETRY_IMPL=none \ SCARF_NO_ANALYTICS=true \ HF_HUB_DISABLE_TELEMETRY=1 \ HF_HUB_OFFLINE=1 \ TRANSFORMERS_OFFLINE=1 \ LANGCHAIN_TRACING_V2=false \ CREWAI_DISABLE_TELEMETRY=true \ OTEL_SDK_DISABLED=true \ STREAMLIT_BROWSER_GATHER_USAGE_STATS=false \ XDG_CACHE_HOME=/app/.cache \ TIKTOKEN_CACHE_DIR=/app/.cache/tiktoken \ HF_HOME=/app/.cache/huggingface \ NLTK_DATA=/app/.cache/nltk_data \ PLAYWRIGHT_BROWSERS_PATH=/app/.cache/ms-playwright RUN mkdir -p /app/.cache/tiktoken /app/.cache/huggingface /app/.cache/nltk_data /app/.cache/ms-playwright # Pre-warm Python tiktoken encodings at build time RUN TIKTOKEN_CACHE_DIR=/app/.cache/tiktoken python3 -c "import tiktoken; [tiktoken.get_encoding(e) for e in ('cl100k_base', 'o200k_base')]" # Khởi động trước (pre-warm) mô hình nhúng ONNX mặc định của ChromaDB tại thời điểm xây dựng (build time) RUN HOME=/app XDG_CACHE_HOME=/app/.cache python3 -c "from chromadb.utils.embedding_functions import ONNXMiniLM_L6_V2; ef = ONNXMiniLM_L6_V2(); ef(['airgap-warmup'])" # --- KẾT THÚC XỬ LÝ CÁCH LY MẠNG (AIR-GAP) VÀ THU THẬP DỮ LIỆU TỪ XA (TELEMETRY) --- Cơ chế hoạt động và giới hạn của tham số --run Tham số --run khởi chạy một container với cấu hình --network none, gắn (mount) kho lưu trữ ở chế độ chỉ đọc và tích hợp một công cụ giám sát gọn nhẹ: Một hố đen DNS (DNS sinkhole) tại địa chỉ 127.0.0.1:53/udp. Tệp /etc/resolv.conf trỏ về địa chỉ này, qua đó mọi yêu cầu tra cứu đi qua bộ phân giải của container đều được ghi nhận và phản hồi bằng mã lỗi NXDOMAIN. Các điểm can thiệp (hook) của Python (sitecustomize.py) và Node (node_preload.js) nhằm ghi nhận các nỗ lực kết nối ở cấp độ socket. Các giới hạn: Tham số --run đã được kiểm chứng trên các mục tiêu Python và Node. Các môi trường thực thi khác có thể bị phát hiện nếu sử dụng bộ phân giải của hệ thống, song điều này chưa được xác minh. Lưu lượng truy cập trực tiếp đến các địa chỉ IP cố định (hardcoded IP) hoặc qua giao thức DNS-over-HTTPS sẽ bỏ qua bộ phân giải và không bị ghi nhận. Hệ thống chỉ kiểm tra các nhánh mã nguồn được thực thi. Cần sử dụng tham số --run-cmd để chạy kiểm thử nhanh (smoke test) bao quát các nhánh mã nguồn cần quan tâm. Cơ chế hố đen DNS từ chối kết nối ngay lập tức. Trong môi trường vùng an toàn (enclave) thực tế, các gói tin có thể bị loại bỏ thay vì từ chối, do đó thời gian chờ có thể kéo dài hơn các mức ghi nhận dưới đây. Đánh giá hiệu năng (Benchmark) Thử nghiệm airgap-check được tiến hành trên 20 kho mã nguồn mở AI viết bằng Python và TypeScript theo hai giai đoạn. Giai đoạn 1 (10 kho mã nguồn) nhằm xác định các phương thức lỗi và tinh chỉnh hệ thống quy tắc. Giai đoạn 2 (10 kho mã nguồn) là tập kiểm định độc lập: hệ thống quy tắc đã được cố định tại bản xác nhận (commit) 8ce2f11 trước khi tiến hành đo kiểm. Đây là các thử nghiệm dựa trên đầu dò (probe): quy trình không khởi chạy toàn bộ ứng dụng. Trong điều kiện kích hoạt --network none, các lệnh thăm dò được thực thi để tác động trực tiếp vào những hàm thư viện cụ thể bị công cụ quét tĩnh cảnh báo (ví dụ: hàm tiktoken.get_encoding('cl100k_base') đối với gpt-engineer; thao tác tạo và chèn dữ liệu vào tập hợp ChromaDB đối với mem0 và vanna; việc phân giải mô hình Hugging Face đối với docling và quivr; cùng đầu dò kiểm tra cơ bản đối với chat-langchain). Chi tiết về các câu lệnh thăm dò, đường dẫn URL nguồn và mã băm commit SHA được ghi nhận đầy đủ tại tệp benchmark/REPOS.md. Hành vi của các thư viện khi không có kết nối mạng Thư viện / Lời gọi hàm Hành vi khi không có kết nối mạng Máy chủ đích cố gắng kết nối Kết quả ghi nhận fastembed TextEmbedding() Thử lại 3 lần (3 giây, 9 giây, 27 giây), sau đó báo lỗi ValueError: Could not load model huggingface.co ~39 giây huggingface_hub hf_hub_download() Thử lại việc kiểm tra siêu dữ liệu (metadata) theo cơ chế lùi thời gian (backoff), sau đó báo lỗi LocalEntryNotFoundError huggingface.co ~23,5 giây chromadb collection.add() Hàm nhúng mặc định tải xuống mô hình ONNX all-MiniLM-L6-v2 chroma-onnx-models.s3.amazonaws.com Thất bại trong vòng dưới 1 giây tiktoken (Python) get_encoding() Tải tệp xếp hạng BPE trong lần sử dụng đầu tiên openaipublic.blob.core.windows.net Thất bại trong vòng dưới 1 giây nltk nltk.download() Cố gắng tải tệp chỉ mục và kho ngữ liệu (corpus) raw.githubusercontent.com Thất bại trong vòng dưới 1 giây playwright chromium.launch() Thất bại tr

Nguồn tin: Hacker News AI — Tác giả: humanethq. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.