Alexander Yordanov

Developer, Automation Quality Assurance Engineer and Security Researcher | Sofia, Bulgaria


Извиличане на метаданни от изображения и видеа за OSINT

Intoduction

Винаги съм харесвал дефиницията на думата “метаданни”. Метаданните са данни за данните. Цифровите снимки и видео файлове често съдържат такива данни, добавени при създаването или редактирането им. Тези данни могат да включват марка и модел на камерата, час и дата на заснемане, GPS координати, настройки на апарата и всякаква друга софтуерна информация. Когато става въпрос за различни OSINT дейности, точно такива данни могат да разкрият: къде и кога е направена снимката или видеото и с какво устройство, което е ключово за разследване. Важно е обаче да се има предвид, че социалните мрежи често премахват метаданните при качване - например Facebook и Twitter X.

CLI инструменти за изображения

На unix базираните операционни системи има инструменти за анализ на медийни файлове. Най-популярният е exiftool - много готин инструмент, написан на Perl, който може да извлича и манипулира метаданни от почти всички видове медийни файлове. Може да се инсталира с:

sudo apt install exiftool # за дистрибуции, използващи apt

или

brew install exiftool # за MacOS

Нека вземем снимка с метаданни, която може да намерите ето тук пример

Нека пробваме с:

exiftool снимка.jpg

Make                            : NIKON
Camera Model Name               : COOLPIX P6000
Orientation                     : Horizontal (normal)
X Resolution                    : 300
Y Resolution                    : 300
Resolution Unit                 : inches
Software                        : Nikon Transfer 1.1 W
Modify Date                     : 2008:11:01 21:15:07
Aperture                        : 4.5
Image Size                      : 640x480
Megapixels                      : 0.307
Scale Factor To 35 mm Equivalent: 4.7
Shutter Speed                   : 1/178
GPS Date/Time                   : 2008:10:23 14:28:17.24Z
GPS Latitude                    : 43 deg 28' 1.76" N
GPS Longitude                   : 11 deg 53' 7.42" E
Auto Focus                      : On
Focal Length                    : 6.0 mm (35 mm equivalent: 28.0 mm)
GPS Position                    : 43 deg 28' 1.76" N, 11 deg 53' 7.42" E
Hyperfocal Distance             : 1.24 m
Light Value                     : 12.5

Ключови тагове са “Make”, “Camera Model Name”, “GPS Date/Time” и GPS координати като Latitude и Longitude. Можем да филтрираме само таговете, които ни интересуват:

exiftool снимка.jpg -GPSPosition

GPS Position                    : 43 deg 28' 1.76" N, 11 deg 53' 7.42" E
exiftool снимка.jpg -DateTimeOriginal

Date/Time Original              : 2008:10:22 16:29:49

Exiftool поддържа масово обработване на файлове. Например в текущата директория имаме 2 jpg файла и искаме да извлечем GPS координатите от тях:

exiftool -gps:all -r -ext jpg .

======== ./снимка1.jpg
GPS Latitude Ref                : North
GPS Longitude Ref               : East
GPS Altitude Ref                : Above Sea Level
GPS Time Stamp                  : 14:28:17.24
GPS Satellites                  : 06
GPS Img Direction Ref           : Unknown ()
GPS Map Datum                   : WGS-84
GPS Date Stamp                  : 2008:10:23
======== ./снимка2.jpg
GPS Version ID                  : 2.3.0.0
    1 directories scanned
    2 image files read

или моделите на камерите, с които са направени снимките:

exiftool -model -r -ext jpg .

======== ./снимка1.jpg
Camera Model Name               : COOLPIX P6000
======== ./снимка2.jpg
Camera Model Name               : Canon PowerShot SX60 HS
    1 directories scanned
    2 image files read

Друг инструмент за извличане на метаданни от изображения е Exiv2.

exiv2 pr снимка.jpg

File name       : снимка.jpg
File size       : 159137 Bytes
MIME type       : image/jpeg
Image size      : 640 x 480
Thumbnail       : image/jpeg, 6339 Bytes
Camera make     : NIKON
Camera model    : COOLPIX P6000
Image timestamp : 2008:10:22 16:29:49
File number     : 
Exposure time   : 0.00560852 s
Aperture        : F4.5
Exposure bias   : 0 EV
Flash           : No, compulsory
Flash bias      : 
Focal length    : 6.0 mm
Subject distance: 
ISO speed       : 64
Exposure mode   : Auto
Metering mode   : Multi-segment
Macro mode      : 
Image quality   : FINE   
White balance   : AUTO        
Copyright       : 
Exif comment    : charset=Ascii 

това показва стандартен списък с метаданни.

CLI инструменти за видео

За видео файлове може да ползваме MediaInfo или ffprobe (от пакета ffmpeg). MediaInfo показва подробна информация за видеа.

sudo apt install mediainfo # за дистрибуции, използващи apt

или

brew install mediainfo # за MacOS

Нека да видим какво може да извлечем с mediainfo:

mediainfo видео.mp4

General
Complete name                            : видео.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : iso5 (iso5/iso6/mp41)
File size                                : 106 MiB
Duration                                 : 35 s 152 ms
Overall bit rate                         : 25.3 Mb/s
Frame rate                               : 59.940 FPS
Writing application                      : Lavf60.16.100

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L5.2
Format settings                          : CABAC / 5 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 5 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 35 s 152 ms
Bit rate                                 : 25.3 Mb/s
Width                                    : 3 840 pixels
Height                                   : 2 160 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 59.940 (60000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Stream size                              : 106 MiB (100%)
Writing library                          : x264 core 164 r3108 31e19f9

Този output има съдържа секции като “General” и “Video” с полета като формат, битрейт, широчина, височина, кадри в секунда и други.

За по-подробна информация може да се ползва

mediainfo --fullscan видео.mp4

Ако има координати или дата на снимане, те също ще бъдат видими след използването на командата.

Друг полезен инструмент е hachoir-metadata (част от Python Hachoir пакета). Чрез него може да се извличат данни от различни формати файлове (JPEG, MP4, PDF и др.). Например:

hachoir-metadata снимка.jpg

Metadata:
- Image width: 640 pixels
- Image height: 480 pixels
- Image orientation: Horizontal (normal)
- Bits/pixel: 24
- Pixel format: YCbCr
- Creation date: 2008-11-01 21:15:07
- Creation date: 2008-10-23 14:28:17
- Latitude: 43.46715666666389
- Longitude: 11.885394999997223
- Camera aperture: 2.9
- Camera focal: 4.5
- Camera exposure: 1/178.3
- Camera model: COOLPIX P6000
- Camera manufacturer: NIKON
- Compression: JPEG (Baseline)
- Thumbnail size: 6339 bytes
- ISO speed rating: 64
- EXIF version: 0220
- Date-time original: 2008-10-22 16:29:49
- Date-time digitized: 2008-10-22 16:29:49
- Exposure bias: 0
- Focal length: 6
- Flashpix version: 0100
- Focal length in 35mm film: 28
- Producer: Nikon Transfer 1.1 W
- Comment: ASCII
- Comment: JPEG quality: 73% (approximate)
- MIME type: image/jpeg
- Endianness: Big endian

Python библиотеки

За автоматизации може да се ползват библиотеки като hachoir или Pillow.

from hachoir.parser import createParser
from hachoir.metadata import extractMetadata

parser = createParser("файл.jpg")
metadata = extractMetadata(parser)
for line in metadata.exportPlaintext():
    print(line)
from PIL import Image

img = Image.open('photo.jpg')
exif_data = img._getexif()
print(exif_data)

Реални примери от OSINT

Разполагаме с модифицирана версия на известната снимка от Windows XP - “Bliss”. Нека използваме exiftool, за да извлечем метаданните от нея:

exiftool WindowsXP_1551719014755.jpg

ExifTool Version Number         : 13.30
File Name                       : WindowsXP_1551719014755.jpg
Directory                       : .
File Size                       : 234 kB
File Modification Date/Time     : 2025:06:26 22:02:13+03:00
File Access Date/Time           : 2025:06:26 22:02:38+03:00
File Inode Change Date/Time     : 2025:06:26 22:02:36+03:00
File Permissions                : -rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
XMP Toolkit                     : Image::ExifTool 11.27
GPS Latitude                    : 54 deg 17' 41.27" N
GPS Longitude                   : 2 deg 15' 1.33" W
Copyright                       : OWoodflint
Image Width                     : 1920
Image Height                    : 1080
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 1920x1080
Megapixels                      : 2.1
GPS Latitude Ref                : North
GPS Longitude Ref               : West
GPS Position                    : 54 deg 17' 41.27" N, 2 deg 15' 1.33" W

След бърз преглед виждаме, че снимката има данни за Copyright и GPS Position:

  • OWoodflint
  • 54°17′41.27″ N, 2°15′1.33″ W

След кратък Google search, откриваме, че снимката е направена в близост до Widdale Beck, Великобритания. Намираме също така и профили на автора - X, GitHub и личен WordPress блог. От въпросните сайтове можем да разберем какъв му е имейлът (OWoodflint@gmail.com), къде се намира сега и какво прави. С търсене в интернет за около 10 минути може да се мине предизвикателството и всички “следи” да бъдат открити.

Заключение

Метаданните са като цифрови отпечатъци - те разказват история, която авторът често не осъзнава, че оставя. Както видяхме от примера с модифицираната “Bliss” снимка, дори малко количество метаданни може да доведе до значителни открития - от GPS координати до лична информация за автора. Това демонстрира колко мощен може да бъде този подход при правилното му прилагане.