InterIUT 2025 - Dump IOS
Des activités suspectes ont été observées sur le téléphone d'un utilisateur qui a été contacté par CASTEM. CASTEM aurait demandé à l'utilisateur de mettre à jour son chrome sur son téléphone IOS mais celui-ci n'a pas vraiment bien copier coller l'URL malveillante ce qui fait qu'il n'a pas été compromis. Néanmoins une enquête de votre part est nécessaire pour comprendre l'architecture des attaquants et leur mode opératoire.
Pour valider le flag vous devez réunir :
- Le SSID sur lequel notre utilisateur était connecté
- L'URL que notre utilisateur aurait dû taper directement dans son navigateur
- Le nom de l'AS qui adresse cet URL/IP
- La famille du malware delivré
Exemple de flag : interiut{BBOX 1111:monctfpref.fr:cloudflare:pegasus}
Pour ce challenge de Forensic, il nous est fourni un dossier de sauvegarde iTunes.
Le dossier est composé comme ceci:
$ tree
.
├── 033dffb4beafa4daa8ffe7e00c5426b38889e060
│ ├── 00
│ │ └── 00fd0bb48de5532cc09363c12571a090316205f5
│ ├── 01
│ │ ├── 012707a2ae34d77a28b16a9e443b780ea4e6b0aa
│ │ └── 01a14737bf725839e60201704f5e0447e23800a6
│ ├── 02
│ │ └── 02dcc29d169dda989f3402fe07d8b6526d6fb1ac
│ ├── 03
│ ├── 04
│ │ └── 04ec47c2b38b390219c2c7f245f76f2afb948a1e
│ ├── 05
│ │ ├── 051b560a86376b4644f8bc51d4a7cb41207478da
│ │ ├── 05575c8bd920efae4ffc54c0e25e9981952c5ec2
│ │ ├── 056e8db520405669943b7acac46f1af2354fa0ba
│ │ ├── 059a3fed6d5ccc69ca5d214766d91eb2964787ef
│ │ └── 05fc8de89f9a5c214ca28aedfc4e669f92f91ab1
[...]
│ ├── 9e
│ │ ├── 9e1b3356b10ac38436206af45e16ee1e33469647
│ │ ├── 9e589bea48c0cd3b1c324b5d88eb070d23ed805b
│ │ ├── 9e7b521f0e73ad31dddc91aedaeb775a2c34fccb
│ │ └── 9ec3b0886ef6ebd8e58dab34c4c69ea37fc92d81
│ ├── 9f
│ ├── Info.plist
│ ├── Manifest.db
│ ├── Manifest.db-shm
│ ├── Manifest.db-wal
│ ├── Manifest.plist
│ ├── Status.plist
│ ├── a0
│ │ ├── a053bdbe56366d25c8eb7ba399f11850ac1efbb3
│ │ └── a0a7e0f8da8fc26cc7ec0b151aa4a20c9c29b9fd
│ ├── a1
[..]
│ └── ff
│ ├── ff5e8048363b2491195c932e3152baf423eedb3d
│ └── ff8fcf3dde9e81360b6ba51f0ea27c47b7e87844
└── backup_ios.zip
Dans le fichier Info.plist on peut voir quelques informations comme le nom du téléphone (donc le nom et le prénom de la personne), la version du téléphone, le modèle, la date de sauvegarde et autres. Le fichier en question est le suivant:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Applications</key>
<dict/>
<key>Build Version</key>
<string>18A373</string>
<key>Device Name</key>
<string>iPhone de Foulie Aymeric</string>
<key>Devices Version</key>
<string>1.5.4.88</string>
<key>Display Name</key>
<string>iPhone de Foulie Aymeric</string>
<key>GUID</key>
<string>BBCCED752B3E7917F29E3D62789C6772</string>
<key>IMEI</key>
<string>356081092598002</string>
<key>Installed Applications</key>
<array/>
<key>Last Backup Date</key>
<date>2025-04-29T20:05:06Z</date>
<key>Product Name</key>
<string>iPhone 8</string>
<key>Product Type</key>
<string>iPhone10,4</string>
<key>Product Version</key>
<string>14.0</string>
<key>Serial Number</key>
<string>F4HWW1NNJC67</string>
<key>Target Identifier</key>
<string>033dffb4beafa4daa8ffe7e00c5426b38889e060</string>
<key>Target Type</key>
<string>Device</string>
<key>Unique Identifier</key>
<string>033dffb4beafa4daa8ffe7e00c5426b38889e060</string>
<key>Windows OS Version</key>
<string>Windows 10.0.26100 x64</string>
<key>iTunes Files</key>
<dict>
<!-- Partie longue et inutile -->
</dict>
<key>iTunes Settings</key>
<dict/>
</dict>
</plist>
On trouve donc ici le nom et le prénom du propriétaire: Aymeric Foulie.
Pour poursuivre l'analyse plus en profondeur, j'utilise Autopsy avec le plugin iOSDeviceDataExtractor, permettant de reconstruire les fichiers systèmes iOS, pouvant ensuite être analysés avec le module iOS Analyzer de Autopsy.
Au moment de la création de la source de données, je sélectionne donc le type de source fournie par le plugin et je clique sur suivant.

Ensuite, je sélectionne mon dossier de sauvegarde:

Je n’ai plus qu’à finaliser l’ajout.
On peut maintenant voir dans Autopsy que l’extension a reconstitué les chemins iOS à partir du dossier de sauvegarde.

Grâce à Autopsy nous avons obtenu certaines informations remontées dont l'historique de recherches internet.

Malheureusement ici Autopsy n’a pas trouvé les données des réseaux Wi-Fi connus par le téléphone, il nous faudra donc rechercher cette information manuellement. En faisant une requête sur la base de données principale de la sauvegarde Manifest.db, on trouve les fichiers associés aux configurations réseau:

On récupère donc ainsi le fileID de la base de données des réseaux connus pour ensuite pouvoir la lire ainsi:
$ plistutil -i 0f/0fa75546343ba224c9fe55adc73e8fdedc1029c3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>wifi.network.ssid.Galaxy S22+9974</key>
<dict>
<key>AddReason</key>
<string>WiFi Settings</string>
<key>Hidden</key>
<false/>
<key>CaptiveProfile</key>
<dict>
<key>CaptiveNetwork</key>
<false/>
</dict>
<key>LowDataMode</key>
<false/>
<key>SSID</key>
<data>
R2FsYXh5IFMyMis5OTc0
</data>
<key>JoinedByUserAt</key>
<date>2025-03-17T22:47:05Z</date>
<key>__OSSpecific__</key>
<dict>
<key>networkUsage</key>
<real>1653.5564478635788</real>
<key>BSSID</key>
<string>f6:60:21:47:7b:24</string>
<key>AP_MODE</key>
<integer>2</integer>
<key>CHANNEL</key>
<integer>1</integer>
<key>networkKnownBSSListKey</key>
<array>
<dict>
<key>CHANNEL</key>
<integer>1</integer>
<key>lastRoamed</key>
<date>2025-03-13T10:46:28Z</date>
<key>BSSID</key>
<string>f6:60:21:47:7b:24</string>
<key>CHANNEL_FLAGS</key>
<integer>10</integer>
</dict>
</array>
<key>prevJoined</key>
<date>2025-03-13T07:55:30Z</date>
<key>WiFiNetworkAttributeIsMoving</key>
<false/>
<key>WiFiNetworkAttributeProminentDisplay</key>
<true/>
<key>WiFiNetworkAttributeIsKnown</key>
<true/>
<key>BEACON_PROBE_INFO_PER_BSSID_LIST</key>
<array>
<dict>
<key>BSSID</key>
<string>f6:60:21:47:7b:24</string>
<key>OTA_SYSTEM_INFO_SENT</key>
<false/>
<key>OTA_SYSTEM_INFO_BEACON_ONLY_SENT</key>
<true/>
</dict>
</array>
<key>DiagnosticsBssEnv</key>
<integer>1</integer>
<key>WiFiNetworkPasswordModificationDate</key>
<date>2025-03-13T07:48:18Z</date>
</dict>
<key>JoinedBySystemAt</key>
<date>2025-03-13T10:46:28Z</date>
<key>SupportedSecurityTypes</key>
<string>WPA2 Personal</string>
<key>AddedAt</key>
<date>2025-03-13T07:48:18Z</date>
<key>UpdatedAt</key>
<date>2025-03-17T22:47:05Z</date>
</dict>
</dict>
</plist>
On y trouve donc la première information demandée par le challenge, le SSID sur lequel l'utilisateur était connecté: Galaxy S22+9974.
Revenons à Autopsy pour trouver le nom du site que l’utilisateur a recherché. Dans les "Data Artifacts" puis "Web Search" on trouve donc le site web que l’utilisateur a recherché sur son téléphone:

Nous obtenons ainsi la deuxième information, l'URL que notre utilisateur aurait dû taper directement dans son navigateur: playstores-france.com.
À partir de cette URL, nous devons donc trouver le nom de l’AS auquel elle est rattachée et la famille de malware délivrée par celui-ci. Pour ce faire, nous devons dans un premier temps trouver l'IP du serveur avec un dig
par exemple:
$ dig @8.8.8.8 playstores-france.com
; <<>> DiG 9.18.30-0ubuntu0.24.04.2-Ubuntu <<>> @8.8.8.8 playstores-france.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18431
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: e6fd8145269cd2fb9d89a9e46834542ac096accccec4f7bd (good)
;; QUESTION SECTION:
;playstores-france.com. IN A
;; ANSWER SECTION:
playstores-france.com. 21569 IN A 91.212.166.21
;; Query time: 9 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Mon May 26 13:44:43 CEST 2025
;; MSG SIZE rcvd: 94
Une fois celle-ci récupérée, nous pouvons essayer de trouver plus d'informations sur l'IP avec des sites comme ipinfo.io qui peut être utilisé comme ceci en ligne de commandes:
$ curl ipinfo.io/91.212.166.21
{
"ip": "91.212.166.21",
"city": "Saint Petersburg",
"region": "St.-Petersburg",
"country": "RU",
"loc": "59.9386,30.3141",
"org": "AS198953 Proton66 OOO",
"postal": "195213",
"timezone": "Europe/Moscow",
"readme": "https://ipinfo.io/missingauth"
}
On voit ici que l'IP en question fait partie de l'AS: Proton66.
Maintenant que nous avons cette troisième information, il ne nous reste plus qu'à trouver la famille de malwares que distribue cet AS. Pour ce faire, ma première idée a été de chercher l'IP sur le site VirusTotal.
Le site détecte évidemment cette IP comme malicieuse:

Puis, en navigant dans l'onglet "Community" je tombe sur plusieurs personnes faisant référence au malware SocGholish, car il est visiblement délivré par des serveurs de cet AS.

Nous avons donc maintenant toutes nos informations:
- SSID: Galaxy S22+9974
- URL: playstores-france.com
- AS: Proton66
- MALWARE: SocGholish
On peut maintenant valider l'épreuve avec le flag mis en forme.
FLAG:
interiut{Galaxy S22+9974:playstores-france.com:proton66:socgholish}