Làm thế nào là chức năng không có giấy tờ được phát hiện? [đóng cửa]


11


Tôi đã luôn tự hỏi làm thế nào để bạn tìm thấy API không có giấy tờ / riêng tư ?

Ví dụ: API không có giấy tờ / riêng tư của Apple , Play Station , Windows Phone 7 , Win32 Kernel , Windows API , gọi lại ẩn , v.v ...

Những công cụ nào mà tin tặc sử dụng để tìm hiểu về các chức năng riêng tư và không có giấy tờ?

Tôi có thể đọc kinh nghiệm của mọi người ở đâu về các API riêng và các kỹ thuật kỹ thuật đảo ngược tiết lộ những bí mật thường được giải thích trong tài liệu API?

cảm ơn,
A

Câu trả lời:


7

Có một vài cách tôi có thể nghĩ ra:

  1. Suy tư. Tại đây bạn có được một đối tượng và yêu cầu nó tiết lộ thông tin về chính nó, như phương thức, thuộc tính, v.v ... Với các tùy chọn phù hợp (tùy thuộc vào ngôn ngữ), bạn có thể tiết lộ thông tin không "công khai".

  2. Dịch ngược. Điều này tái tạo (một phiên bản) của nguồn được sử dụng để tạo nhị phân. Một lần nữa, điều này có thể tiết lộ các phần không công khai của API.

Bạn cũng có thể thêm "tình cờ" vào danh sách. Một cuộc gọi / lệnh sai chính tả hoạt động hoặc màn hình trợ giúp tiết lộ quá nhiều thông tin.


2
Bạn có thể thêm vào danh sách một cách tình cờ . Có, nó ít thường xuyên hơn, nhưng nó xảy ra;) Đặc biệt là khi chủ sở hữu API gây ra tai nạn.

1
@Pierre - điểm tốt.
ChrisF

Ngoài ra, chữ ký thư viện chia sẻ. Điều này có liên quan đến dịch ngược, nhưng các hàm được xuất trong tệp dll / .dylib / .so có thể duyệt được bằng các công cụ chính thức (trình thám hiểm phụ thuộc trong Visual Studio, nm trong Unix)
Chris Dolan

4

Các công cụ bình thường mà bạn sử dụng để phát triển phần mềm :)

Thông thường hàm API không có giấy tờ chỉ là rằng, không có cơ sở , và không thực sự ẩn cẩn thận bí mật.

Thiết kế API bằng chứng trong tương lai rất khó - bạn có thể dễ dàng thêm nội dung vào API, nhưng thực sự rất khó để xóa bất kỳ thứ gì (mà không phá vỡ một số khách hàng). Vì vậy, bạn rất cẩn thận khi thêm bất cứ thứ gì vào API. Đó là lý do tại sao có thể có một số chức năng bổ sung (để thử nghiệm, trong quá trình phát triển, hack nhanh?) Trong API, không được ghi lại và không đảm bảo hoạt động hoặc có mặt trong phiên bản tiếp theo.

Các hàm không có giấy tờ này có thể được tìm thấy một cách dễ dàng, cho bạn biết cách trình biên dịch, trình liên kết, thư viện và trình gỡ lỗi hoạt động (công cụ lập trình hệ thống). Biết ngôn ngữ lắp ráp của kiến ​​trúc đích sẽ không bị tổn thương. Nếu IDE / trình biên dịch của bạn có thể xây dựng các tệp thực thi đang hoạt động, bạn cũng có thể thực hiện "thủ công" đó và để mắt mở trên đường dẫn đó bạn có thể khám phá một số tính năng ẩn :)

Ví dụ trong môi trường Unix: Một kịch bản trong đó chúng tôi chỉ có tài liệu cho chức năng printf và muốn biết liệu có một số chức năng giống như printf khác không . Chuyến tàu tư tưởng có thể đi một cái gì đó như:

1. Kiểm tra tệp tiêu đề

$ grep printf /usr/include/stdio.h | head -5
extern int fprintf (FILE *__restrict __stream,
extern int printf (__const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
extern int vprintf (__const char *__restrict __format, _G_va_list __arg);

2. Kiểm tra thư viện

$ nm /usr/lib/libc.a | grep printf | head -5
         U __asprintf
         U __fwprintf
         U __asprintf
         U __fwprintf
         U __printf_fp

3. Chức năng thư viện tháo rời

    $ objdump -S /usr/lib/libc.a | grep -A 10 '_fwprintf' | head
00000000 <__fwprintf>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   8d 45 10                lea    0x10(%ebp),%eax
   6:   83 ec 0c                sub    $0xc,%esp
   9:   89 44 24 08             mov    %eax,0x8(%esp)
   d:   8b 45 0c                mov    0xc(%ebp),%eax
  10:   89 44 24 04             mov    %eax,0x4(%esp)
  14:   8b 45 08                mov    0x8(%ebp),%eax
  17:   89 04 24                mov    %eax,(%esp)

Hoặc điều tương tự...


2

từ chối trách nhiệm: Tôi thích câu trả lời của ChrisF. Nó không để lại một vài cách tiếp cận, tôi nghĩ vậy. Nếu nó được đặt trong các bình luận cho câu trả lời về cách chúng được bảo hiểm, tôi sẽ xóa câu trả lời của tôi.

Nó có thể sắp xếp theo sự dịch ngược:

Việc tìm kiếm các API không có giấy tờ khác cũng có thể thông qua việc gỡ lỗi một công cụ do nhà cung cấp cung cấp, loại nào bạn muốn và theo dõi các cuộc gọi liên thư viện. Bằng cách này, bạn có thể có ý tưởng về loại dữ liệu được gửi đến đâu.

Các công cụ "tùy chỉnh" khác sau đó có thể được viết để chơi với các API không có giấy tờ này bằng python và CTYPES hoặc ruby ​​với phiên bản tương tự của nó cho đến khi bạn tìm ra chính xác những gì nó đang làm hoặc làm mờ cho các sự cố. Chủ đề này được Aaron Portnoy trình bày ở độ sâu tối thiểu trong: http://pentest.cryptocity.net/reverse-engineering/ và một số cuộc nói chuyện khác của ông tại các hội nghị (tôi dường như nhớ rằng ông nói trực tiếp về nó tại một cuộc nói chuyện ở Brazil ). Nó liên quan đến RE, nhưng tôi không nghĩ nó chính xác chỉ là RE chung. Lưu ý: các video trên pentest.cryptocity.net không CHỈ LÀ chủ đề này. Họ bao gồm các khu vực khác sâu hơn, điều này chỉ là chạm vào. Tôi nghĩ bởi vì đó thường là thứ mà những người thử nghiệm bảo vệ là "các bước chính xác sẽ tiết lộ bí mật của chúng tôi".

Cảm ơn đã đọc bất kỳ thông tin phản hồi đánh giá cao.

chỉnh sửa: một công cụ có thể chứng minh hữu ích cho việc này ở phía cửa sổ được bảo vệ tối thiểu tại đây: http://breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
chiếm quyền điều khiển cuộc gọi cho java dày khách hàng sử dụng dịch vụ mạng tùy chỉnh fuzz được đề cập ở đây:
http://www.securityTube.net/JavaSnoop-How-to-hack-anything-written-in-Java-video.aspx

cái cuối cùng chỉ có liên quan tối thiểu, nhưng có thể chứng minh thích hợp nơi người hỏi cuối cùng sẽ đi đâu. sử dụng API mà bạn không sở hữu để làm ... bất cứ điều gì.


Thêm câu trả lời của riêng bạn hơn là cung cấp nhiều thông tin / khác nhau là tốt - đó là tất cả những gì về Stack Exchange.
ChrisF

@ChrisF cảm ơn đã làm rõ. có vẻ như nó có thể đã được bao phủ bằng cách đảo ngược. tôi nghĩ rằng nó có thể mang ký hiệu cụ thể hơn về một phương pháp khả thi khác / tập hợp con đảo ngược cụ thể hơn (đảo ngược có thể bao gồm việc tìm kiếm các ký hiệu không được tham chiếu trong MSDN, v.v.).
RobotHumans

-2

Hack có vẻ khá lãng mạn, gián điệp công nghiệp, rò rỉ, mua chuộc, trộm cắp và may mắn không. Tôi sẽ không tính chúng ra mặc dù.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.