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.

Type de source de données

Ensuite, je sélectionne mon dossier de sauvegarde:

Dossier de la 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.

Reconstruction chemins

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

Données trouvées par Autopsy

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:

Fichiers associés à la configuration 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:

Site web cherché par l'utilisateur

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:

VirusTotal sur l'IP 91.212.166.21

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.

Ressources de communauté VirusTotal

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}