söndag 13 juni 2010

IRC-demon innehöll trojan

Världens kanske populäraste IRC-demon, UnrealIRCd, har distribuerats med en trojan sen november. Teamet gick själva ut med information om det igår och Sitic skrev om det idag.

(Förlåt att det är lite låg frekvens på bloggandet just nu men det är mycket inför konferensen. En vecka kvar och över 230 anmälda. 3500 kr för två dagars konferens, tre parallella spår och en middag på stadshuset. Haka på!)

Mardrömmen för öppen källkod
UnrealIRCd snuddar vid den ultimata mardrömmen inom öppen källkod, nämligen att någon smyger in ett rootkit i källkoden och sen får full access till alla användares/utvecklares maskiner.

I det här fallet var det den byggda tar:en som bytts ut och ingen upptäckte det på åtta månader:

"It appears the replacement of the .tar.gz occurred in November 2009 (at least on some mirrors). It seems nobody noticed it until now."

Skrämmande men inte alltför förvånande. Vem kollar MD5-summorna? Varje gång?

Värre med dynamisk länkning
Ett relaterat men mycket värre problem är dynamisk länkning. När jag var doktorand i Linköping så handlade mycket av mitt arbete om säkerhet i C. Då var det en gängse sanning att all säkerhetskritisk kod var tvungen att länkas statiskt, dvs libbarna kompileras in i binären som så klart blir gigantisk. På det viset visste man vilken kod som kördes och ett hack i libbarna eller som bytte ut dem påverkade inte den säkerhetskritiska koden.

Dynamisk länkning innebär att din applikationskod länkas samman med andra bibliotek vid applikationsstart eller till och med vid behov under körning. På det viset delas gemensam kod och applikationer får direkt del av buggfixar i bibliotek utan att behöva byggas om själva.

Men säkerhetsmässigt är det problematiskt. Attackvektorn blir så pass mycket större om man genom att knäcka eller byta ut ett bibliotek kan knäcka en massa applikationer och tjänster samtidigt.

Nuförtiden är det inte många som pratar om statisk vs dynamisk länkning. Men problemet är i själva verket större än någonsin!

Dynamisk länkning av JavaScript
Även om de flesta tutorials föreslår att man ska ladda hem de JavaScript-bibliotek man vill använda så ser man väldigt ofta deklarationer i stil med:

<script src="http://code.jquery.com/jquery-1.4.2.min.js" type="text/javascript"></script>

... vilket innebär att användarnas webbläsare kommer att hämta den kod som finns hos code.jquery.com och köra/använda den på sidan. Den som lyckas hacka JQuery kommer äga nätet.

Jag förmodar att JavaScript-bibliotekens ovilja att publicera sin kod på en https-domän handlar delvis om det. De vill inte dynamiskt länkas in i https-skyddade applikationer.

Dynamisk länkning med Maven
Att hacka JQuery- eller YUI-servrarna skulle mycket snabbt ge effekt om det inte vore för de allt vanligare "never expire"-cache-kontrollerna. Men vore det inte ännu läskigare om någon hackade något populärt öppen källkods-projekt såsom Log4J eller Apache Commons? Folk laddar automatiskt hem ditt rootkit med Maven utan att ens veta vad som försiggår.

Ibland undrar jag varför det inte redan hänt. Eller om det har hänt men jag inte har fått reda på det. Då blir hack som det mot UnrealIRCd som en klump i magen. Ingen upptäckte det på åtta månader ...

Inga kommentarer: