Prototipo di rootkit per Linux che utilizza io_uring per eludere gli analizzatori delle chiamate di sistema

I ricercatori dell'azienda ARMO hanno dimostrato la possibilità di creare rootkit che non utilizzano chiamate di sistema specifiche per eseguire operazioni comuni, come la lettura/scrittura di file e la ricezione di comandi da un server esterno. Invece delle chiamate di sistema per eseguire operazioni di rete e file, è stato proposto di utilizzare l'interfaccia di input/output asincrono io_uring, supportata a partire dal kernel Linux 5.1.

Il principio del metodo è che, invece di chiamate di sistema separate per accedere a file e effettuare operazioni di rete (read/write, recv/send/connect/bind/listen), si possono utilizzare comuni chiamate di sistema io_uring (io_uring_enter, io_uring_setup, io_uring_register, ecc.), che non vengono analizzate dagli strumenti standard per rilevare attività malevole. L'interfaccia io_uring supporta circa 60 diverse operazioni. È in fase di sviluppo una funzionalità che permette di avviare nuovi processi tramite io_uring.

Per dimostrare il funzionamento del metodo è stato preparato un prototipo di rootkit chiamato Curing, che esegue azioni come la ricezione di comandi da un esterno server e trasferimento/modifica di file. Nella dimostrazione è stata utilizzata l'invio di una richiesta al TCP port 8888 di un host esterno e l'invio del contenuto del file "/etc/shadow". Si presume che dopo una compromissione riuscita del sistema e l'ottenimento dei diritti root, l'attaccante installi un rootkit per consolidare la sua presenza nel sistema compromesso.

Nell'esperimento condotto, l'attività del rootkit Curing è risultata non rilevata dagli strumenti di monitoraggio Falco e Tetragon, utilizzati per identificare anomalie di sicurezza sui host e nei contenitori (è supportata l'integrazione con infrastrutture basate su Kubernetes). Tali strumenti utilizzano l'intercettazione delle chiamate di sistema per analizzare eventi come l'avvio di processi, attività di rete e manipolazione di file, ma non tengono conto della possibilità di utilizzare il sottosistema io_uring per tali operazioni. La maggior parte dei sistemi commerciali disponibili per Linux per la rilevazione e risposta agli incidenti di sicurezza si basa inoltre sull'intercettazione delle chiamate di sistema.

Per evitare di aggirare gli strumenti di monitoraggio dell'attività di rete e dei file, si consiglia di utilizzare il meccanismo KRSI (Kernel Runtime Security Instrumentation), introdotto nel kernel Linux 5.7, che consente di collegare programmi BPF a qualsiasi hook LSM. Ad esempio, KRSI a livello di hook LSM consente di monitorare le operazioni sui file, l'accesso di rete e l'avvio di processi, indipendentemente dal fatto che queste operazioni siano state avviate tramite chiamate di sistema specifiche o tramite io_uring.

In precedenza, il sottosistema io_uring era oggetto di critiche a causa della frequente emersione di gravi vulnerabilità. In risposta alle richieste degli utenti che desideravano uno strumento semplice per disabilitare io_uring senza ricompilare il kernel, nel kernel Linux 6.6 è stato aggiunto il sysctl io_uring_disabled. Google ha disabilitato io_uring di default in ChromeOS, Android e sui suoi server, spiegando che la preoccupante situazione della sicurezza in io_uring supera i vantaggi dell'uso di io_uring per migliorare le prestazioni.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster