TDCTF Academy Logo TDCTF ACADEMY

Lab 5: String & Metadata Analysis - Menggali Informasi Tersembunyi dari File

Target Skill: Mahasiswa mampu mengekstrak informasi berharga dari string, metadata, dan data tersembunyi dalam file
Tools: strings, exiftool, binwalk, file, hexdump
Durasi: 30 menit
Level: Beginner


Mengapa String & Metadata Penting?

Setiap file menyimpan lebih banyak data daripada yang terlihat:

  • Metadata EXIF - kamera, GPS, tanggal, software yang dipakai
  • Hidden strings - password hardcoded, URL, IP yang tidak terlihat di viewer normal
  • Embedded files - file di dalam file (steganography sederhana)
  • History data - track changes, comments, draft

Ini adalah low-hanging fruit dalam forensik - seringkali attacker lupa membersihkan metadata sebelum menyebarkan file.


Learning Objectives

  1. Mengekstrak string dari binary file
  2. Membaca metadata EXIF dari gambar
  3. Mendeteksi file tersembunyi dengan binwalk
  4. Menganalisis hex dump untuk menemukan anomali

️ Tools & Setup

sudo apt install -y binwalk exiftool file xxd

Langkah Praktikum

Step 1: Analisis String - Mencari Informasi Tersembunyi

Buat file yang mengandung data sensitif tersembunyi:

cd ~ && mkdir forensics-lab5 && cd forensics-lab5

# Buat file gambar dengan data tersembunyi di dalamnya
# Teknik: append data setelah akhir file JPEG
echo "=== HIDDEN DATA ===" > /dev/null
python3 -c "
# Buat file PNG sederhana dengan hidden data
import struct, zlib

# Minimal PNG: signature + IHDR + IDAT + IEND
def create_minimal_png(width=1, height=1):
sig = b'\\x89PNG\\r\\n\\x1a\\n'

# IHDR
ihdr_data = struct.pack('>IIBBBBB', width, height, 8, 2, 0, 0, 0)
ihdr_crc = zlib.crc32(b'IHDR' + ihdr_data) & 0xffffffff
ihdr = struct.pack('>I', 13) + b'IHDR' + ihdr_data + struct.pack('>I', ihdr_crc)

# IDAT (dummy)
raw_data = b''
for y in range(height):
raw_data += b'\\x00' + b'\\x00\\x00\\x00' * width
compressed = zlib.compress(raw_data)
idat_crc = zlib.crc32(b'IDAT' + compressed) & 0xffffffff
idat = struct.pack('>I', len(compressed)) + b'IDAT' + compressed + struct.pack('>I', idat_crc)

# IEND
iend_crc = zlib.crc32(b'IEND') & 0xffffffff
iend = struct.pack('>I', 0) + b'IEND' + struct.pack('>I', iend_crc)

return sig + ihdr + idat + iend

png_data = create_minimal_png()

# Append sensitive data AFTER PNG end marker
hidden = b'\\n\\n===RAHASIA=== Password DB = root@localhost:SuperSecret2024\\nIP Server Internal = 10.0.0.1\\nAPI_KEY = sk-live-abc123def456\\n===END RAHASIA===\\n'

with open('foto-produk.png', 'wb') as f:
f.write(png_data + hidden)

print('✅ foto-produk.png created with hidden data')
print(f' Size: {len(png_data) + len(hidden)} bytes')
"

Step 2: Ekstrak String

# 1. File identification
echo "=== File Type ==="
file foto-produk.png

# 2. Strings - cari semua teks yang bisa dibaca
echo ""
echo "=== Strings (semua) ==="
strings foto-produk.png

# 3. Strings - filter yang mengandung keyword sensitif
echo ""
echo "=== Strings - Password & Key ==="
strings foto-produk.png | grep -iE "(password|api[_-]?key|secret|token|rahasia)"

# 4. Strings - filter IP address
echo ""
echo "=== Strings - IP Address ==="
strings foto-produk.png | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

# 5. Strings minimal length
echo ""
echo "=== Strings (min 20 chars) ==="
strings -n 20 foto-produk.png

Step 3: Analisis Metadata EXIF

# Buat gambar dengan metadata palsu
python3 -c "
import struct, zlib, time

# PNG with multiple text chunks
sig = b'\\x89PNG\\r\\n\\x1a\\n'

# IHDR
ihdr_data = struct.pack('>IIBBBBB', 100, 100, 8, 2, 0, 0, 0)
ihdr_crc = zlib.crc32(b'IHDR' + ihdr_data) & 0xffffffff
ihdr = struct.pack('>I', 13) + b'IHDR' + ihdr_data + struct.pack('>I', ihdr_crc)

# tEXt chunks (metadata)
def make_text(key, value):
data = key.encode() + b'\\x00' + value.encode()
crc = zlib.crc32(b'tEXt' + data) & 0xffffffff
return struct.pack('>I', len(data)) + b'tEXt' + data + struct.pack('>I', crc)

text_chunks = b''
text_chunks += make_text('Author', 'Hacker1337')
text_chunks += make_text('Software', 'Microsoft Paint')
text_chunks += make_text('Description', 'Foto KTP nasabah - rahasia')
text_chunks += make_text('Copyright', 'Data dicuri dari bank X, 2024')

# IDAT
raw = b'\\x00' + b'\\x00\\x00\\x00' * 10000 # 100x100 pixels
compressed = zlib.compress(raw)
idat_crc = zlib.crc32(b'IDAT' + compressed) & 0xffffffff
idat = struct.pack('>I', len(compressed)) + b'IDAT' + compressed + struct.pack('>I', idat_crc)

# IEND
iend_crc = zlib.crc32(b'IEND') & 0xffffffff
iend = struct.pack('>I', 0) + b'IEND' + struct.pack('>I', iend_crc)

with open('foto-ktp.png', 'wb') as f:
f.write(sig + ihdr + text_chunks + idat + iend)

print('✅ foto-ktp.png with EXIF-like metadata created')
"

# Analisis metadata
echo "=== EXIF / Metadata Analysis ==="
exiftool foto-ktp.png

# Filter metadata spesifik
echo ""
echo "=== Author & Software ==="
exiftool foto-ktp.png | grep -E "(Author|Software|Description|Copyright|Creator)"

Step 4: Deteksi File Tersembunyi (Binwalk)

# Buat file yang mengandung file lain di dalamnya
python3 -c "
import struct, zlib

# Buat file ZIP yang embedded di dalam PNG
# 1. Buat PNG dulu
sig = b'\\x89PNG\\r\\n\\x1a\\n'

# IHDR (small 1x1)
ihdr_data = struct.pack('>IIBBBBB', 1, 1, 8, 2, 0, 0, 0)
ihdr_crc = zlib.crc32(b'IHDR' + ihdr_data) & 0xffffffff
ihdr = struct.pack('>I', 13) + b'IHDR' + ihdr_data + struct.pack('>I', ihdr_crc)

# Minimal IDAT
raw_data = b'\\x00' + b'\\x00\\x00\\x00'
compressed = zlib.compress(raw_data)
idat_crc = zlib.crc32(b'IDAT' + compressed) & 0xffffffff
idat = struct.pack('>I', len(compressed)) + b'IDAT' + compressed + struct.pack('>I', idat_crc)

# IEND
iend_crc = zlib.crc32(b'IEND') & 0xffffffff
iend = struct.pack('>I', 0) + b'IEND' + struct.pack('>I', iend_crc)

png_part = sig + ihdr + idat + iend

# 2. Buat minimal ZIP (file kosong)
import io, zipfile

zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, 'w') as zf:
zf.writestr('secret.txt', 'DATA CURIAN: no_kartu_kredit.txt')
zip_data = zip_buffer.getvalue()

with open('gambar-embedded.zip.png', 'wb') as f:
f.write(png_part + zip_data)

print('✅ gambar-embedded.zip.png created (PNG + ZIP appended)')
print(f' PNG size: {len(png_part)}, ZIP size: {len(zip_data)}')
"

# Analisis dengan binwalk
echo "=== Binwalk Analysis ==="
binwalk gambar-embedded.zip.png

# Ekstrak embedded file
echo ""
echo "=== Extract dengan binwalk ==="
binwalk -e gambar-embedded.zip.png 2>/dev/null || echo "Ekstraksi otomatis gagal, coba manual:"
mkdir -p extracted
cd extracted
# Manual extraction using unzip
cp ../gambar-embedded.zip.png embedded.zip
unzip -o embedded.zip 2>/dev/null && cat secret.txt 2>/dev/null
cd ..

Step 5: Hex Dump Analysis

# Analisis hex dari awal file
echo "=== Hex Dump (32 byte pertama) ==="
xxd -l 32 foto-produk.png

# Cari anomali di tengah file
echo ""
echo "=== Hex di offset 1000 ==="
xxd -s 1000 -l 64 foto-produk.png 2>/dev/null || echo "File terlalu kecil"

# Bandingkan dengan file asli (tanpa hidden data)
echo ""
echo "=== Perbandingan dengan file bersih ==="
python3 -c "
# Buat versi bersih (tanpa hidden data)
with open('foto-produk.png', 'rb') as f:
data = f.read()

# Cari IEND marker
iend_pos = data.find(b'IEND')
if iend_pos > 0:
clean_end = iend_pos + 12 # length(4) + 'IEND' + CRC(4)
print(f'IEND ditemukan di offset {iend_pos}')
print(f'Data setelah IEND: {len(data) - clean_end} bytes - ini hidden data!')
print(f'Isi hidden: {(data[clean_end:]).decode(\"utf-8\", errors=\"replace\")}')
"

️ Analisis & Pertanyaan

1. Tipe Forensik Metadata

Sumber Informasi Contoh
EXIF Foto Kamera, GPS, tanggal Nikon D850, -6.2, 106.8
Office Docs Author, editor, revision history "Created by Bambang"
PDF Creator, producer, timestamps Adobe Acrobat 2024
ZIP/RAR File list, kompresi timestamps 15 files, 2024-06-10
Binary Debug symbols, compiler info GCC 11.4, -O2

2. Apa yang Bisa Ditemukan

Dari lab ini:

  • foto-produk.png - mengandung password DB, IP, API key di hidden string
  • foto-ktp.png - metadata mengungkap author "Hacker1337" dan deskripsi curian
  • gambar-embedded.zip.png - file ZIP disembunyikan di belakang PNG

3. Deteksi Anomali

# Cara cepat deteksi hidden data
echo "=== Deteksi Hidden Data ==="
for f in *.png; do
# Bandingkan ukuran dengan isi yang diharapkan
echo -n "$f: "
strings $f | grep -qiE "(password|secret|api_key|token|http)" && echo "⚠️ MENGANDUNG DATA SENSITIF!" || echo "Bersih (tidak terdeteksi)"
done

Laporan Temuan

Finding 1: Hidden Strings in Image File (Critical)

Parameter Value
File foto-produk.png
Offset Setelah IEND marker PNG
Data Ditemukan Password DB, IP internal, API key
Metode Deteksi strings & xxd

Dampak: Kredensial database dan API key terekspos

Finding 2: Metadata Reveals Source (Medium)

Parameter Value
File foto-ktp.png
Author Field "Hacker1337"
Description "Foto KTP nasabah - rahasia"
Copyright "Data dicuri dari bank X, 2024"

Dampak: Metadata mengungkap identitas pelaku dan sumber data curian

Finding 3: Embedded ZIP (High)

Parameter Value
File gambar-embedded.zip.png
Embedded ZIP archive berisi secret.txt
Metode Deteksi binwalk & unzip
Isi Data kartu kredit

Dampak: File terlihat sebagai gambar, tapi mengandung data curian


Korelasi OWASP / CWE / CAPEC

Kerangka ID Deskripsi
CWE CWE-200 Exposure of Sensitive Information
CWE CWE-312 Cleartext Storage of Sensitive Data
CWE CWE-359 Exposure of Private Information
CWE CWE-540 Inclusion of Sensitive Information in Source Code
CAPEC CAPEC-37 Retrieve Embedded Sensitive Data
CAPEC CAPEC-545 File System Analysis
CAPEC CAPEC-646 Steganography

️ Remediasi

Masalah Tools Pencegahan Best Practice
Hidden strings strings scan CI/CD Jangan hardcode secret di file
Metadata bocor exiftool -all= Stripping metadata sebelum publikasi
Embedded files binwalk audit Validasi file integrity
Steganography Steg detection tools Training staff deteksi
# Hapus semua metadata dari file
exiftool -all= -overwrite_original foto.jpg

# Scan hidden data di semua file PNG di folder
for f in *.png; do
echo "=== $f ==="
strings -n 15 "$f" | head -5
done

Kesimpulan & Refleksi

Apa yang dipelajari:

  • File menyimpan lebih banyak dari yang terlihat - strings, metadata, embedded data
  • strings adalah tool paling sederhana tapi powerful untuk forensik
  • exiftool membuka metadata yang sering dilupakan
  • binwalk bisa mendeteksi file yang disembunyikan dalam file lain
  • Hidden data bisa ditemukan tanpa tool canggih - cukup terminal

Refleksi untuk mahasiswa:

"Di forensik digital, tidak ada file yang polos - selalu ada cerita di balik layar. Setiap metadata, setiap string yang tidak sengaja tertinggal, adalah bukti. Sebagai praktisi keamanan, biasakan strip metadata sebelum publikasi, dan biasakan scan strings sebelum percaya isi file."


Selesai!

Selamat! Kamu sudah menyelesaikan semua 5 Lab Digital Forensics Beginner!

Ringkasan Skill yang Dipelajari

Lab Skill Tools
1 File Carving foremost, dd, xxd
2 Timeline Analysis stat, find, grep
3 Memory Forensics volatility3
4 Network Forensics tshark, tcpdump
5 String & Metadata strings, exiftool, binwalk

Next Steps

Setelah menguasai basic ini, kamu bisa lanjut ke:

  1. Intermediate Forensics:

    • Analisis registry Windows
    • Memory forensics real case
    • Steganography detection
  2. Advanced Forensics:

    • Malware reverse engineering
    • Mobile device forensics
    • Cloud forensics
  3. Sertifikasi:

    • CHFI (Computer Hacking Forensic Investigator)
    • GCFE (SANS Forensic Examiner)
    • CCFP (Certified Cyber Forensics Professional)

Referensi Lengkap


🔬 Semua Lab Selesai! Kembali ke Beranda Forensics


Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy

PADA HALAMAN INI