Vu Nguyen


Site Reliability Engineer @CocCoc
eBPF Developer /#linux
Beautifully broken - Charming chaos
Share: 

Steganography

Trong mật mã học, Steganography là một cách biểu diễn thông tin để khó bị phát hiện bởi con người. Trong thực tế, phương pháp này thường được dùng để ẩn thông tin bí mật trong một file khi truyền tải, nó được sử dụng rất nhiều trong môi trường khắc nghiệt như Deepweb để trao đổi những thông tin bất hợp pháp giúp có thêm cơ hội để giảm thiểu khả năng bị phát hiện bởi những tổ chức An ninh mạng chính phủ. Thông tin bí mật có thể là một file khác hoặc đơn thuần là một file text có chưa nội dung bí mật. Đây có thể là một trong những cách để “đánh lạc hướng” trong các cuộc điều tra kỹ thuật số (Digital Forensics) vì “những cái thực sự thấy chỉ là phần nổi của tảng băng chìm”.

Forensics

Để dễ hình dung, hãy đi vào xem xét một ví dụ sau:

Giả sử một nhóm cybercrime đang thực hiện buôn bán bất hợp pháp trên internet nhưng họ muốn bằng một cách nào đó đánh lạc hướng các điều tra viên nên đã “bẻ lái” câu chuyện thành một cuộc thảo luận về UFO. Trong câu chuyện có bình luận những hình ảnh liên quan đến những alien “rất cute” chẳng hạn như:

image.png

Trông thì có vẻ không có gì bất thường ở đây. Nhưng hãy download ảnh này về và tiến hành phân tích chúng.

Đầu tiên, bản chất của image file là một file có chứa tập dữ liệu được mã hóa. Vì vậy ta hoàn toàn có thể kiểm tra file đó bằng lệnh cat :

┌──(kali㉿kali)-[/tmp]
└─$ cat cutie.png          
�PNG
▒
IHD���PLTE�����������������������������������������������������������������������������������������������������������������������������a���*EB��:����ϲ30p�.(CA��b+FB��8">;&@B&A>9RO =:#<A;8$@=96.)%>A��b��:&AA��:��e��c��]��9��_�`P��b4-HC��Z5NK�#▒��W���!:@t�-�ӵ0KG�����������Ͱ���r�-u�"6SB��?/KB�����6��G��������L��C2OB��ب�Z���CZWn�,Rhc��T9X@>VRMc^�ٻ����ꖞ�P��`H_[z�;��W��9l�,���Wli������j}z��])&��c���^rmGk>t�<Nq;��d��;���cwt������>\G��Z�����Ց����:������Q|?Be>>^>��\!EC��������Ј��u����\Y|M��������QsK}��o�~��X�����vEeHm�<��ƌ��a�=l�*x����mg�=$ ������`�2m�R�è]�>���a�OW�>h�0��/����ôf�PWw5���t�S��������°����PLlJ����������󜥰�i{n�:�"�˼}�|z�)[oa�������줃����I��Vx�T�����Aq�q��������W3D?y�5���}�U�aPAA=�>0�'��x�UF�.%sPHz6/|�nVE?e82��ȅ�ZM�UJ��N��D�*tRNS��
�(���0Θ�?E�LU8��]��eԹsxoj������������IDATx����OSg▒�[
W4/ȠD��󞛾=9=���!�ihK�
        d)��i0�P!�Au��Ĉ��,
                          Y$r���;�[�2�v�s����=0�hO9��e�x���y���<���4��䤢�S��*���X�ɂ��d���%��t��t=�`0f��,/I�q�HI-(./19�ey�Z�8L��U���ƲSE:��Aک,؝���Ru▒     OQv:�+��4�FB�����b-J$0)����r⸖_&*G���s-H$&�F�?J
t▒      GR6�7��
               �Fb������N#�8}D���N#aH.փh1��i)g�'@_��R���c:�D�▒�Th�F"p
|2
`w�}��`�kէ�I����Ͼ���t����ʝ��]t���S���2�@��b��F�v;�0v;mu����>-�L\���������▒h��/�����B��z�;����(éAC{�E�$��zI:0L\��"�P�÷t
                                                                                                                      `(K�i���:W�`H<iw�hN�4�I��K����n��w��C#���H�;���
�uUcF�t▒G�<:Dhs�*���j�J���*ߍ/_���_�~��Y]C�qt�G�V��H�׋��jn��p��U��r�<|�\]%��
                                                                           �Yf�4���t ���K
TU�����r��-2_ݰX�1bU}�kC����;/�����&�X5�1;�z~�"E@�@��NC]���
...

Trông có vẻ không khả thi vì toàn bộ thông tin của file đã được mã hóa :D. Lúc này hãy thử lọc ra những ký tự mà chúng ta có thể đọc được bằng lệnh strings

┌──(kali㉿kali)-[/tmp]
└─$ cat cutie.png | strings
...
        ([b!
G9qE
(A}j
^MEjOk
L^ay
"P{J
d: ]
ZT%Q
p7a4u
^[=&
IEND
To_agentR.txt
W\_z#
2a>=
To_agentR.txt
EwwT
                                                                                                                                                     
┌──(kali㉿kali)-[/tmp]
└─$ 

Weu, chúng ta thấy gì này :D, có vè là một file gì đó có tên To_agentR.txt được nhúng trong hình ảnh này. File này có thể có một vài thông tin bí mật sẽ hữu ích trong cuộc điều tra của chúng ta.

Vì vậy, hãy thử trích xuất file này khỏi file ảnh ban đầu.

Kiểm tra các file binaries khác có thể được nhúng trong file:

┌──(kali㉿kali)-[/tmp]
└─$ binwalk cutie.png 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 528 x 528, 8-bit colormap, non-interlaced
869           0x365           Zlib compressed data, best compression
34562         0x8702          Zip archive data, encrypted compressed size: 98, uncompressed size: 86, name: To_agentR.txt
34820         0x8804          End of Zip archive, footer length: 22

Kết quả kiểm tra cho thấy có một tệp Zip được nhúng, và file được zip có tên To_agentR.txt. Vì vậy phán đoán ban đầu của chúng ta đã đúng.

Thực hiện trích xuất toàn bộ dữ liệu của file

──(kali㉿kali)-[/tmp]
└─$ binwalk -e cutie.png

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 528 x 528, 8-bit colormap, non-interlaced
869           0x365           Zlib compressed data, best compression

WARNING: Extractor.execute failed to run external extractor 'jar xvf '%e'': [Errno 2] No such file or directory: 'jar', 'jar xvf '%e'' might not be installed correctly
34562         0x8702          Zip archive data, encrypted compressed size: 98, uncompressed size: 86, name: To_agentR.txt
34820         0x8804          End of Zip archive, footer length: 22

                                                                                                                                                     
┌──(kali㉿kali)-[/tmp]
└─$ ls -la _cutie.png.extracted 
total 316
drwxrwxr-x  2 kali kali    100 Sep 30 04:18 .
drwxrwxrwt 18 root root    460 Sep 30 04:18 ..
-rw-rw-r--  1 kali kali 279312 Sep 30 04:18 365
-rw-rw-r--  1 kali kali  33973 Sep 30 04:18 365.zlib
-rw-rw-r--  1 kali kali    280 Sep 30 04:18 8702.zip
                                                                                                                                                     
┌──(kali㉿kali)-[/tmp]
└─$ 

Một file zip có tên: 8702.zip được trích xuất. Trong đây có thể chứa thông tin chúng ta đang cần. Hãy thử giải nén file đó ra.

Giải nén file

┌──(kali㉿kali)-[/tmp]
└─$ 7za e _cutie.png.extracted/8702.zip 

7-Zip (a) 24.07 (x64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-06-19
 64-bit locale=en_US.UTF-8 Threads:32 OPEN_MAX:1024

Scanning the drive for archives:
1 file, 280 bytes (1 KiB)

Extracting archive: _cutie.png.extracted/8702.zip
--
Path = _cutie.png.extracted/8702.zip
Type = zip
Physical Size = 280

    
Enter password (will not be echoed):

Có vẻ chúng ta đã gặp chút rắc rối vì file yêu cầu mật khẩu để có thể giải nén được. Các bước tiếp theo sẽ thực hiện crack zip file để truy xuất được thông tin cần tìm.

Trong mật mã truyền tin, 2 bên thường sẽ có một khóa (thường gọi là secret key). Khóa này như là một password dùng “mở khóa” để lấy được những thông tin mà người gửi muốn truyền tải. Cách này càng giúp cuộc điều tra trở nên khó khăn vì đã tăng thêm 1 lớp xác thực.

Crack zip password

┌──(kali㉿kali)-[/tmp/_cutie.png.extracted]
└─$ zip2john 8702.zip > dump.hash    
                                                                                                                                                     
┌──(kali㉿kali)-[/tmp/_cutie.png.extracted]
└─$ ls    
365  365.zlib  8702.zip  dump.hash
                                                                                                                                                     
┌──(kali㉿kali)-[/tmp/_cutie.png.extracted]
└─$ cat dump.hash          
8702.zip/To_agentR.txt:$zip2$*0*1*0*4673cae714579045*67aa*4e*61c4cf3af94e649f827e5964ce575c5f7a239c48fb992c8ea8cbffe51d03755e0ca861a5a3dcbabfa618784b85075f0ef476c6da8261805bd0a4309db38835ad32613e3dc5d7e87c0f91c0b5e64e*4969f382486cb6767ae6*$/zip2$:To_agentR.txt:8702.zip:8702.zip

Sau khi nhận được hash. Lúc này hãy thực hiện brute-force để tìm được mật khẩu

┌──(kali㉿kali)-[/tmp/_cutie.png.extracted]
└─$ john dump.hash                                                         
Using default input encoding: UTF-8
Loaded 1 password hash (ZIP, WinZip [PBKDF2-SHA1 128/128 AVX 4x])
Cost 1 (HMAC size) is 78 for all loaded hashes
Will run 8 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
alien            (8702.zip/To_agentR.txt)     
1g 0:00:00:01 DONE 2/3 (2024-09-30 04:36) 1.000g/s 45470p/s 45470c/s 45470C/s 123456..ferrises
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

Rất may mắn khi mật khẩu được đặt không quá phức tạp nên việc crack hoàn thành rất nhanh chóng. Lúc này hãy sử dụng mật khẩu đã crack được là alien để unzip file

# Extract file
┌──(kali㉿kali)-[/tmp/_cutie.png.extracted]
└─$ 7za e 8702.zip                     

7-Zip (a) 24.07 (x64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-06-19
 64-bit locale=en_US.UTF-8 Threads:32 OPEN_MAX:1024

Scanning the drive for archives:
1 file, 280 bytes (1 KiB)

Extracting archive: 8702.zip
--
Path = 8702.zip
Type = zip
Physical Size = 280

    
Enter password (will not be echoed):
Everything is Ok

Size:       86
Compressed: 280
                                                                                                                                       
┌──(kali㉿kali)-[/tmp/_cutie.png.extracted]
└─$ ls
365  365.zlib  8702.zip  dump.hash  To_agentR.txt

# Trích xuất thông tin bí mật                                                                                                                                                     
┌──(kali㉿kali)-[/tmp/_cutie.png.extracted]
└─$ cat To_agentR.txt 
Agent C,

We need to send the picture to 'QXJlYTUx' as soon as possible!

By,
Agent R
                                                                                                                                                     
┌──(kali㉿kali)-[/tmp/_cutie.png.extracted]
└─$ 

Done, sẽ khá là bất ngờ khi lần đầu tiên bạn khám phá được cách nhúng thông tin bí mật vào một file khác. Hầu hết các file đều có thể nhúng những thông tin bí mật khác vào chúng. Quan trọng là trong quá trình truyền tải, các dữ liệu đó có phải là những dữ liệu vi phạm tính chất về cộng đồng hay những nội dung độc hại được các mạng xã hội detect được và xóa nó đi hay không, còn việc nhúng thông tin bí mật vào file khá dễ dàng. Vì vậy, cybercrimes thường sẽ sử dụng những mạng xã hội lỏng lẻo trong tính bảo mật để thuận lợi trong việc trao đổi thông tin bất hợp pháp.

, ,