blank

blank

Recentemente, uma campanha de malware direcionada a usuários de dispositivos móveis Android. O aplicativo malicioso imita o aplicativo do banco PKO BP – IKO. Após a análise, descobriu-se que os ataques usam o Trojan bancário Coper, que foi visto pela primeira vez na Polônia.

MALWARE FAMILY: Coper
ATT&CK IDS: T1027 – Arquivos ou informações ofuscadosT1454 – Mensagem SMS maliciosaT1192 – Link de SpearphishingT1566 – PhishingT1204.002 – Arquivo MaliciosoT1022 – Dados criptografadosT1048.001 – Exfiltração sobre protocolo simétrico criptografado não C2

 

Campanha

Uma notificação de um SMS suspeito em que o remetente da mensagem pede para renovar o sistema “ativando” o aplicativo:

Szanowny kliencie.W ostatnim czasie odnotowaliśmy aktywność ataków chakerskich.
Prosimy odnowić system https://iko.pkobq.pl/aktywacja/

 

A palavra “chakers” escrita por ch e a frase “Por favor, renove o sistema”, que soa estranha em polonês, merecem atenção. Obviamente, o domínio malicioso estava imediatamente em nossa lista de avisos e um pkobq.plpedido de remoção do registro foi feito para o próprio domínio.

Depois de clicar no link contido na mensagem SMS, o usuário é transferido para um site falso do banco PKO BP. É preparado profissionalmente e lembra o site real do aplicativo IKO.

blank

Os invasores prepararam uma instrução passo a passo para o usuário sobre como instalar o aplicativo e conceder a ele permissões adicionais. Após o primeiro lançamento, aparece uma janela que exige insistentemente consentimento para usar os serviços de acessibilidade.

A acessibilidade tem como objetivo auxiliar as pessoas com deficiência a operar o sistema, mas costuma ser usada por malware para assumir o controle do dispositivo. Se o usuário concordar que o malware usa essa funcionalidade, ele pode imitar as ações do usuário, como clicar em botões ou fechar janelas. Como resultado, ele assume o controle total do dispositivo.

blank

Uma observação interessante é que, por algum tempo, o ator da campanha usou a plataforma GitHub para hospedar o APK malicioso. No entanto, depois de excluir mais algumas contas, ele decidiu direcionar os usuários diretamente para o aplicativo em seu site.

blank

O arquivo baixado obviamente não é um aplicativo de banco real, mas uma amostra de malware pouco conhecido da família Coper. O único material disponível sobre isso no momento vem de uma análise feita pelo Dr.WEB quando foi usado para infectar usuários da Colômbia: https://news.drweb.com/show/?i=14259

Análise técnica

Depois de descompilar o arquivo APK, por exemplo, com a ferramenta JADX, à primeira vista não parece particularmente interessante – a maioria das classes estão vazias e você não vê nenhuma funcionalidade interessante nelas. Podemos começar a suspeitar que o aplicativo foi empacotado de alguma forma.

A atenção pode ser atraída para uma classe que se refere à biblioteca nativa incluída EzSNRfTMfY.

 

public class SjrPjuhyyhtmbDJ extends Application {
    static {
        System.loadLibrary("EzSNRfTMfY");
    }

    /* access modifiers changed from: protected */
    public void attachBaseContext(Context context) {
        super.attachBaseContext(context);
        snlOMCujSZmMAS(context);
    }

    public native void snlOMCujSZmMAS(Object obj);
}

 

Também pode determinar sua presença usando o navegador de arquivos do projeto. Na captura de tela abaixo, é mostrado como libEzSNRfTMfY.so.

blank

O próximo passo será analisar essa biblioteca e, em particular, a função chamada a partir dela snlOMCujSZmMAS. Para tanto, pode utilizar, por exemplo, um descompilador disponível no IDA Pro.

blank

Acessar o código descompilado ajuda muito a determinar como a library funciona. Rapidamente à conclusão de que ele descriptografa o arquivo anexado ziwnopufusando a cifra RC4 ea chave permanente – neste caso 3O10TAjsBlehWNa8e7vUgOWHlRH1T4Tr.

A operação deste código pode ser simulada muito facilmente usando a library Malduck para trabalhar no malware. O código com seu uso que permite descriptografar o arquivo ziwnopuftem a seguinte aparência:

from malduck import rc4
with open("res/raw/ziwnopuf", "rb") as f:
    data = f.read()

decrypted = rc4(b"3O10TAjsBlehWNa8e7vUgOWHlRH1T4Tr", data)

with open("decrypted.dex", "wb") as f:
    f.write(decrypted)

 

O arquivo dex resultante é muito mais interessante. blank

Algumas cadeias de caracteres são criptografadas novamente com RC4 e chave 7BLiz2PK6wbk1mhp, mas também desta vez não é um grande problema e pode usar o Malduck de forma análoga.

Como resultado, teremos um fio dental descriptografado. Um deles são os servidores C&C usados:'https://s22231232fdnsjds.top/PArhFzp5sG2sN/|https://s32231232fdnsjds.top/PArhFzp5sG2sN/|https://s42231232fdnsjds.top/PArhFzp5sG2sN/'

Gastando algum tempo em análises adicionais, podemos determinar que as consultas e respostas são criptografadas com a cifra AES no modo de bloco ECB e, em seguida, codificadas usando Base64:

public static String m59try(String str) {
    if (str == null || str.isEmpty()) {
        return "";
    }
    try {
        SecretKeySpec secretKeySpec = new SecretKeySpec(adgjsfgjsgdfjea(Ctry.f83try).getBytes(), "AES");
        Cipher instance = Cipher.getInstance("AES/ECB/PKCS5Padding");
        instance.init(1, secretKeySpec);
        byte[] doFinal = instance.doFinal(str.getBytes());
        return doFinal == null ? str : Base64.encodeToString(doFinal, 0);
    } catch (Exception unused) {
        return str;
    }
}

 

No entanto, a chave para essa criptografia é gerada usando a função hash MD5 – 54569d2aaae7176335a67bf72e86736f:

public static String adgjsfgjsgdfjea(String str) {
    try {
        MessageDigest instance = MessageDigest.getInstance("MD5");
        instance.update(str.getBytes());
        byte[] digest = instance.digest();
        StringBuilder sb = new StringBuilder();
        for (byte b : digest) {
            String hexString = Integer.toHexString(b & 255);
            while (hexString.length() < 2) {
                hexString = "0" + hexString;
            }
            sb.append(hexString);
        }
        return sb.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return "";
    }
}

 

Sendo capazes de descriptografar a comunicação, podemos analisar sua aparência e, em seguida, criar um pacote adequado fingindo ser um dispositivo infectado. Mais informações sobre o protocolo de comunicação podem ser encontradas no relatório Dr.WEB . Graças ao estabelecimento dessa comunicação, podemos obter uma resposta do servidor com os dados de configuração atuais, incluindo uma lista de aplicativos para os quais o autor preparou webinjects ou domínios C&C adicionais.

 

{
    "response": "er1",
    "tasks": [],
    "injects_list": "au.com.auswidebank.auswidebank|au.com.bankwest.mobile|au.com.ingdirect.android|au.com.nab.mobile|au.com.pnbank.android|au.com.suncorp.SuncorpBank|be.belfius.directmobile.android.test|bot.accessibility.hint|com.abnamro.nl.mobile.payments.test|com.android.chrome.test|com.android.vending.test|com.anz.android.gomoney|com.bankofqueensland.boq|com.bbva.bbvacontigo|com.bbva.netcash|com.bendigobank.mobile|com.bnpp.easybanking.test|com.commbank.netbank|com.facebook.katana.test|com.facebook.orca.test|com.fusion.banking|com.fusion.beyondbank|com.grupocajamar.wefferent.test|com.ing.banking.test|com.ing.mobile.test|com.instagram.android.test|com.kbc.mobile.android.phone.kbc.test|com.rsi.test|com.skype.raider.test|com.targoes_prod.bad.test|com.triodos.bankingnl.test|com.viber.voip.test|com.whatsapp.test|enterprise.com.anz.shield|es.bancosantander.apps|es.bancosantander.apps.test|es.bancosantander.empresas.test|es.lacaixa.mobile.android.newwapicon|es.openbank.mobile.test|es.santander.Criptocalculadora.test|net.inverline.bancosabadell.officelocator.android.test|org.banksa.bank|org.bom.bank|org.stgeorge.bank|org.westpac.bank|pt.santandertotta.mobileparticulares.test|uk.co.tsb.newmobilebank|www.ingdirect.nativeframe.test|",
    "extra_domains": "https://s122231232fdnsjds.top/|https://s222231232fdnsjds.top/|https://s322231232fdnsjds.top/|",
    "keylogger_enabled": null,
    "net_delay": "20"
}

 

No caso de uma consulta incorreta, o servidor finge ser um servidor HTTP comum, mas você pode ver a mensagem de erro comentada na decodificação da consulta – <!-- aes_err: -->:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /PArhFzp5sG2sN/ was not found on this server.</p>
</body></html>
<!-- aes_err: -->

 

A lista de webinjects, ou seja, aplicativos para os quais software malicioso tentará roubar dados, merece atenção. Na maioria dos casos, eles têm uma nota .testque os faz com que não funcionem e podem sugerir um estágio inicial de desenvolvimento de software. Quando os removemos, obtemos a seguinte lista de aplicativos direcionados:

au.com.auswidebank.auswidebank
au.com.bankwest.mobile
au.com.ingdirect.android
au.com.nab.mobile
au.com.pnbank.android
au.com.suncorp.SuncorpBank
bot.accessibility.hint
com.anz.android.gomoney
com.bankofqueensland.boq
com.bbva.bbvacontigo
com.bbva.netcash
com.bendigobank.mobile
com.commbank.netbank
com.fusion.banking
com.fusion.beyondbank
enterprise.com.anz.shield
es.bancosantander.apps
org.banksa.bank
org.bom.bank
org.stgeorge.bank
org.westpac.bank
uk.co.tsb.newmobilebank

 

É interessante que, de momento, não encontraremos aplicações polacas nele, o que não significa que a infecção por este malware não seja perigosa. Além do mecanismo de webinjects, o Coper permite interceptar e enviar SMSs ou iniciar um keylogger.

COI

Arquivos APK:

nome do arquivo Usuário Githuba MD5
IKO.apk @ steve229898 368f4b4d74a749ff55d76e929b52fedd
2.iko_com.mindsoonvfk_IKO.apk @bechertfidor aebe71b857e868b1af752f90255aaab5
2.iko_com.stoptravelg_IKO.apk @bechertfidor d2d8027baebf285703dc753219574d3e
3.iko_com.growmainwkmm_IKO.apk @fidorde d6f521d9e83160ee06d71dc217c56693
IKO.apk d6f521d9e83160ee06d71dc217c56693

 

Servidores C&C permanentemente costurados nas amostras:

  • https://s22231232fdnsjds[.]top/PArhFzp5sG2sN/
  • https://s32231232fdnsjds[.]top/PArhFzp5sG2sN/
  • https://s42231232fdnsjds[.]top/PArhFzp5sG2sN/

Servidores C&C dinâmicos:

  • https://s122231232fdnsjds[.]top/
  • https://s222231232fdnsjds[.]top/
  • https://s322231232fdnsjds[.]top/

 

Fonte: CERT PL


Descubra mais sobre DCiber

Assine para receber os posts mais recentes por e-mail.