1 điểm bởi GN⁺ 1 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Danh sách binary Unix được sắp xếp theo từng chức năng, và các hành động có thể thực hiện từ mỗi binary đều được liên kết trực tiếp tới trang chi tiết và anchor link
  • Các phân loại lặp lại thường gặp là Shell, File read, File write, Command, Inherit, Upload, Download, Reverse shell, Library load, Privilege escalation, và ở một số mục còn có thêm Bind shell
  • File readShell xuất hiện rất rộng, còn các công cụ như dd, sed, sqlite3 vừa có đọc vừa có ghi, làm mờ ranh giới với những công cụ chỉ mang tính tra cứu đơn thuần
  • Các công cụ như apt, git, journalctl, systemctl thường bao gồm CommandInherit, trong khi những binary đa năng như bee, pipx, sqlmap, họ vim lại nhiều lần xuất hiện với cả truyền tải qua mạng và hành vi shell
  • Privilege escalation chỉ xuất hiện giới hạn ở một số binary có gắn liên kết riêng, và danh sách rộng từ 7z đến zypper cho thấy rõ sự khác biệt trong tổ hợp hành vi của các công cụ phổ thông chỉ trong một cái nhìn

Phân bố chức năng tiêu biểu

  • Các mục chỉ đọc tệp hoặc thiên về đọc được phân bố rất rộng
  • Các mục có thể thực thi shell cũng rất nhiều
  • Có nhiều mục vừa ghi tệp vừa đọc, khiến ranh giới với các công cụ chỉ để tra cứu trở nên mờ hơn
  • Thực thi lệnh hoặc kế thừa quyền thường xuất hiện trong trình quản lý gói, công cụ hệ thống và chương trình tương tác

Binary đa năng

Mạng, shell, nạp thư viện

Các mục leo thang đặc quyền

1 bình luận

 
Ý kiến trên Hacker News
  • Có vẻ nhiều bình luận đang hơi nhầm, nên nếu lấy ví dụ về lúc thứ này được dùng trong ngữ cảnh bảo mật/CTF thì sẽ như sau
    Trong môi trường có shell bị hạn chế hoặc chỉ cho chạy một số lệnh/binary nhất định, thường vẫn có thể truyền tham số khá tự do
    Lúc đó, dùng GTFOBins có thể dẫn tiếp tới việc đọc/ghi file hoặc thực thi lệnh, từ đó thoát khỏi ngữ cảnh bị giới hạn và lấy được shell
    Nếu ai đó mở sudo hoặc gán SUID bit cho một GTFOBin, thì còn có thể đọc/ghi các file nhạy cảm hoặc chạy lệnh có đặc quyền theo cách mà ngay cả người cấu hình cũng không lường trước được

    • Điều này cũng khá đúng với các công cụ như claude-code
      Cách xử lý quyền hạn của nó khá nguyên thủy vì chủ yếu dựa trên block-list và allow-list
      Có lần trong một phiên làm việc tôi lỡ cấp quyền powershell cho Claude, rồi sau đó khi các công cụ như git bị chặn thì nó viết script powershell làm cùng việc để chạy, qua mặt phần quyền bị chặn
      Một hệ thống bình thường thì sẽ không đưa powershell vào allow-list chung, nhưng nếu có khoảng hở giữa các mức cho phép theo từng công cụ thì có vẻ hoàn toàn có thể xoay xở bằng các kỹ thuật trên trang này
    • Một số phần mềm bảo mật doanh nghiệp nói rằng họ làm điều phối nâng quyền cũng có thể gặp rủi ro tương tự
      Tôi từng thấy ở một công ty cách triển khai là các chương trình nằm trong allowlist do quản trị viên thêm vào sẽ được chạy bằng sudo mà không cần mật khẩu, và ngay từ đầu đã có các công cụ đa dụng như vim, bash trong đó
      Ở góc độ người làm việc từ xa thì tôi còn thấy đó là may mắn, vì phần mềm nói là để "bảo vệ" máy tính của tôi này thực ra lại khiến việc ai đó đến chạy gì đó dễ hơn nhiều nếu tôi rời chỗ một lúc và quên khóa màn hình
    • Rốt cuộc thì đây trông như một hướng dẫn khá toàn diện cho thấy restricted shell thực tế chặn được ít đến mức nào
    • Cũng có ví dụ cụ thể
      Vài năm trước đội hỗ trợ cần chụp bắt mạng bằng tcpdump, nên để xử lý nhanh họ thêm một quy tắc sudo khá thoáng về tham số
      Khi đó việc đó có vẻ tự nhiên vì cổng hoặc NIC có thể thay đổi, nhưng thật ra tcpdump có tùy chọn -z để chỉ định lệnh nén, nên nếu nhét một lệnh "đặc biệt" vào đó thì có thể chiếm luôn máy chủ
      sudo tcpdump -i any -z '/home/despicable_me/evil_cmd.sh' -w /tmp/dontcare.pcap -G 1 -Z root
      Trông nhỏ nhặt nhưng những thứ như vậy thực sự rất dễ bị bỏ sót
      Ngày nay các lớp như apparmor đôi khi giúp giảm rủi ro này, nhưng đổi lại cũng sinh thêm rắc rối khác và vẫn rất dễ cấu hình sai
    • Nhìn cái này tôi còn có cảm giác nó giống một danh sách được sắp xếp để AI học cách vượt sandbox
  • Lần cuối tôi dùng thứ tương tự là trên máy tính trường cấp hai cài Windows 3.11 vào khoảng 1995
    Họ khóa chỉ cho chạy vài ứng dụng được phê duyệt, mà một trong số đó là Word
    Trong Word thì có thể dùng macro và dùng shell để chạy ứng dụng khác
    Thế là chiếc máy tính bị khóa chỉ hiện vài ứng dụng thực chất lại thành máy có thể chạy gần như mọi thứ
    Hồi đó cảm giác rất phấn khích, và từ sau đó tôi hầu như không còn thấy chuyện tương tự nữa
    Thỉnh thoảng tôi có thấy người ta nói có thể thoát kiosk mode trên các màn hình cảm ứng thông tin ở cửa hàng hay trung tâm mua sắm, và chắc đó cũng cùng một nhóm vấn đề

  • Nhìn mục restic - Shell, Command, Upload làm tôi thấy việc chỉnh để không chạy backup bằng root có phần được hợp lý hóa hơn
    Thay vào đó tôi cho nó chạy bằng người dùng thường nhưng chỉ cấp read-all-files capability và bỏ shell đăng nhập
    Tất nhiên trên desktop thì có thể là quá tay, và nếu kẻ tấn công đã chui được tới mức đó thì đằng nào cũng gần như đọc được mọi file và cài backdoor vào bản sao lưu
    [0] https://man7.org/linux/man-pages/man7/capabilities.7.html

    • Khi thấy các ràng buộc, xu hướng của LLM là kết luận kiểu "vậy thì cứ dùng một helper để lách mà đi vòng qua thôi", và điều đó có vẻ đang phá vỡ khá nhiều giả định của thế giới trước đây
      Chúng ta có cách đối phó với kẻ tấn công là con người từ xa, bot từ xa, và phần nào là cả con người cục bộ, nhưng bot tấn công cục bộ có thể tự viết mã thì giờ là đối tượng phải để tâm hơn rất nhiều so với trước
      Nó cũng không hoàn toàn cùng một loại với malware
      Tôi cũng từng xem container là một ranh giới liên quan và cho chạy toàn bộ tiến trình bên trong bằng root, nhưng khi có LLM chen vào thì tôi không còn chắc bảo mật ở mức OS đột nhiên trở nên quan trọng hơn, hay ngược lại là trở nên vô nghĩa hơn
  • Tôi hơi bối rối, ý ở đây là khi không có cat thì hãy dùng base64 /path/to/input-file | base64 --decode thay cho cat /path/to/input-file à
    Hay là base64 /path/to/input-file | base64 --decode có nghĩa là nó tự vượt qua cả quyền đọc file

    • Là ý đầu tiên
      Tiến trình được gọi thường kế thừa nguyên quyền của người dùng đã chạy nó, và chỉ có ngoại lệ khi có setuid bit
      Điểm chính là trong môi trường cố chặn lateral movement của kẻ tấn công bằng cách tắt các công cụ Unix chuẩn, thì vẫn có thể làm cùng việc bằng công cụ khác
    • Nghĩa là kiểu chặn quyền bằng giới hạn lệnh dựa trên blacklist vốn dĩ trước đây đã không hiệu quả, và bây giờ cũng vẫn vậy
    • Là ý đầu chứ không phải ý sau
      Không phải vượt qua bản thân quyền hạn, mà là nói về việc trong một shell hạn chế chỉ cho phép vài lệnh thì vẫn tạo ra cùng kết quả bằng binary khác
      Chuyện này trong CTF cực kỳ phổ biến
    • Tuy vậy, nếu có file mà bạn bình thường không đọc được nhưng lại có thể chạy base64 bằng quyền root thì câu chuyện sẽ khác
      Chạy base64 với quyền root để mã hóa nội dung file sang base64, rồi giải mã đầu ra đó bằng một tiến trình base64 khác thì cuối cùng bạn vẫn xem được nội dung file
      Xét cho cùng thì nó cũng giống cat, chỉ là thêm vài bước
    • Nếu vậy thì tôi còn nghĩ tar pipe có khi nhẹ hơn
  • Tôi từng là người bảo trì của một trong những công cụ kiểu này, nên thấy ai đó bật được shell bằng nó thì khá buồn cười
    Vừa sáng tạo vừa thú vị, và cũng là tư liệu hay

  • Hồi chơi hackthebox.eu tôi đã dùng thứ này rất nhiều

  • GTFOBins đã có từ khá lâu rồi, và ngay cả trước thời AI nó cũng đã là tài liệu hữu ích

    • Vì thế nên tôi càng lo cho tương lai hơn
      Chính điều làm AI hữu ích là nó có thể kéo lên và tận dụng những tư liệu như thế này vốn đã tồn tại sẵn
  • Tôi không hiểu lắm vì thấy base64 cũng có trong danh sách
    Theo tôi thì nó chỉ có thể đọc những file mà người dùng vốn đã truy cập được thôi, hay là tôi đang hiểu sai
    Hay là mô tả vượt các hạn chế bảo mật cục bộ trên hệ thống bị cấu hình sai có nghĩa khác với cách tôi đang hiểu

    • Điểm cốt lõi là, ngay cả khi bạn chỉ có một shell hạn chế được cấu hình sai hoặc chỉ được cấp quyền truy cập vài lệnh, thì các công cụ trong danh sách đó vẫn có thể giúp người dùng khôi phục lại một phần phạm vi truy cập mà họ vốn có trong môi trường không bị hạn chế
      Ví dụ đơn giản nhất là dù có đổi shell mặc định thành rbash, nếu người dùng vẫn chỉ cần chạy bash là vào được shell thường thì mọi thứ coi như mất ý nghĩa
    • Chẳng hạn sudoers có thể cho phép chạy base64 bằng quyền root
      Tôi cũng không biết vì sao ai đó lại làm vậy, nhưng nếu rơi vào tình huống đó thì bạn sẽ có thể vượt qua giới hạn quyền dự định ban đầu và đọc bất kỳ file nào trên hệ thống
      Hoặc nếu trong Claude Code người ta cho phép chạy base64 mà không cần xét duyệt thì có thể cũng đồng nghĩa mở đường để đọc cả các file bí mật như .env
    • Tình huống thường gặp là một vài công cụ có thể chạy với quyền root
      Hoặc được cho phép tường minh trong sudo -l, hoặc có thứ gì khác gọi công cụ đó dưới quyền root
  • Sẽ hay hơn nếu nó cũng chỉ ra cả cách giảm thiểu các kiểu lách này
    Ví dụ nếu trường hợp lấy shell qua more thì
    đặt SHELL thành /bin/false trước khi chạy more
    đổi sang lesssecure mode
    hoặc nếu dùng more qua sudo thì dùng cờ NOEXEC chẳng hạn

    • Biện pháp giảm thiểu tốt nhất là đặt quyền thực sự của các file mà người dùng không nên đọc hoặc ghi cho đúng
      Những cách khác rốt cuộc vẫn có phần dựa vào may rủi
  • Khá ngầu, và có những cách tiếp cận sáng tạo mà tôi không ngờ tới
    Ví dụ như yt-dlp thì tôi chưa từng nghĩ đến
    Chắc phải xem lại việc cứ cài sẵn nó thôi