Một số tips khi build tools để dùng trên mục tiêu chạy hệ điều hành Windows

Một số tips khi build tools để dùng trên mục tiêu chạy hệ điều hành Windows

Trong thời gian đầu làm Redteam, câu hỏi được mình đặt ra nhiều nhất sau khi RCE được một target Windows Server và upload các công cụ lên chính là: Sao "hàng" của mình không chạy được?. Đây có thể là một vấn đề đơn giản đối với những ae dân security thuần, hoặc thậm chí là các coder. Tuy nhiên, khó khăn lớn nhất đối với những người ngoại đạo (non-IT) rẽ sang security như mình chính là thiếu kiến thức nền. Cũng chính vì kiến thức nền khiến mình mất khá nhiều thời gian để trả lời được câu hỏi đó :( Do đó, mình viết bài này để chia sẻ kinh nghiệm cá nhân đối với các bạn newbie trong lĩnh vực hacking và mong rằng bài này sẽ giúp các bạn tiết kiệm thời gian trong quá trình nghiên cứu, làm việc của mình.

Vì sao "hàng" không chạy được

Một tool được compile, chạy mượt mà trên máy bạn, song không chạy được hoặc trả về thông báo lỗi hết sức chung chung trên máy khác thường do 2 nguyên nhân chính sau:

  • Thiếu những thư viện, những thành phần đi kèm mà tool đó cần để hoạt động;
  • Do bị AV (Antivirus) phát hiện.

Trường hợp thiếu thư viện, các thành phần đi kèm

  • Để vận hành một dây chuyền lớn thì cần những bộ phận, những nhân sự nhỏ và đảm nhiệm những công việc riêng. Đôi khi chỉ thiếu một trong số đó cả dây chuyền sẽ không vận hành được. Những công cụ phức tạp, ví dụ như exploit của các CVE trên hệ điều hành Windows cũng giống dây chuyền đó. Nó cần sử dụng các hàm Windows API, thư viện của Visual Studio hoặc một số thư viện đặc thù đi kèm... Và việc thiếu những thành phần đó trên target sẽ khiến công cụ của bạn không chạy được. Một số trường hợp kinh điển mình từng gặp như:
    • Với ứng dụng build bằng C/C++: Phiên bản của Visual C++ Redistributable trên target chưa tương thích với phiên bản được sử dụng để compile ra tool (thiếu các file mscvr120.dll, vcruntime140.dll);
    • Với ứng dụng build bằng C#: Phiên bản .NET Framework trên target thấp hơn phiên bản .NET Framework được dùng cho tool của bạn.

Trường hợp "hàng" bị AV phát hiện

  • Thông thường tool bị AV phát hiện thường sẽ được xóa hoặc đưa vào quarantine. Đôi khi người dùng chỉ cấu hình cho AV ngăn chặn hành vi độc hại thay vì xóa ứng dụng đó. Do đó nhiều trường hợp bạn chỉ thấy tool của mình chạy và kết thúc ngay, không trả về kết quả hoặc màn hình chỉ hiển thị những thông báo lỗi chung chung:
    tools

Cách khắc phục

Trường hợp thiếu thư viện, các thành phần đi kèm

  • Với các tool được code bằng C/C++:
    • Cách 1: Build lại ứng dụng với phiên bản Visual Studio phù hợp với Visual C++ Redistributable trên target (không khuyến khích)
    • Build ứng dụng với cờ /MT (Trong Visual Studio, chọn Project properties > Code generation > C/C++ > Runtime Library)
      mt
      Mặc định, Runtime Libary của project là /MD. Microsoft đã giải thích cụ thể về từng option trong mục này tại: https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=msvc-170, nhưng hiểu một cách đơn giản thì: Khi compile ứng dụng với /MT, C++ runtime đã nằm sẵn trong ứng dụng (static library) tuy nhiên sẽ làm tăng size của ứng dụng; ứng dụng được compile với /MD sẽ link đến các dll có sẵn trên máy khi được chạy, ví dụ như vcruntime140.dll.
      Như vậy, tool được compile với /MD có nguy cơ bị crash trên các target không cài hoặc sử dụng Visual C++ Redistributable không tương thích với tool. Để tool của bạn có thể chạy trên nhiều target nhất có thể, mình khuyến khích compile với /MT.
  • Với các tool được code bằng C#:
    Chọn target framework của project phù hợp với phiên bản .NET framework trên máy mục tiêu > kiểm tra và khắc phục các lỗi của code khi chuyển sang phiên bản .NET framework khác > compile lại tool.
    csharp

Trường hợp bị AV phát hiện

Trường hợp này cần sử dụng các kỹ thuật để bypass quá trình phân tích của AV. Đây là một mảng kiến thức rộng, với rất nhiều tips, tricks. Mình sẽ viết chi tiết phần này trong những post sau :D

Subscribe to DEV2SEC

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe