2019-12-28

December 2019 - OWASP Proactive C4: Encode and Escape Data

Encoding och escaping är tekniker för att förhindra injektionsattacker.

Encoding eller kodning av tecken innebär att man översätter specialtecken till ett annat tecken som fortfarande betyder samma sak, men som är ofarligt för det mottagande systemet. Exempelvis "<" ändras till "&lt;" om det handlar om HTML.

Escaping (här saknar jag ett vettigt svenskt ord) handlar om att lägga till ett speciellt tecken framför ett annat för att det inte ska misstolkas, ex. \ före " (dubbla citationstecken) eller ' (enkelt citationstecken) för att det ska hanteras som text istället för att avsluta en sträng.

Många programmeringsspråk har färdiga funktioner som man kan använda för att hantera encoding och escaping. Sök på det språk som du använder och se vad som erbjuds.



Nyheter för månaden:
  • Senaste uppdateringarna gjorda.

2019-11-09

November 2019 - OWASP Proactive C3: Secure Database Access

Några områden att beakta för säker databasaccess:

  1. Säkra SQL-frågor
  2. Säker konfiguration
  3. Säker autentisiering
  4. Säker kommunikation

Säkra SQL-frågor

Trots att de flesta känner till SQL injection så finns det ändå många fall där en applikation/webbplats är sårbar för det. Ofta kan man komma åt precis hela databasen genom att lämna ett enda hål öppet för SQL injection. Man undviker enkelt sårbarheten genom att parametrisera SQL-frågorna. Kolla på den här webbsidan för hur man gör det för de vanligaste programmeringsspråken:
Andra sätt är att validera indata och att hantera de specialtecken som skickas (ex. i PHP mysqli::real_escape_string).

Säker konfiguration

Kontrollera att databasens konfiguration är korrekt och att säkerhetskontroller är aktiverade. Sök nätet för att hitta det som gäller för din databas.

Säker autentisiering

All access till databasen ska vara autentiserad och gjord på ett säkert sätt.

Säker kommunikation

Använd säker kommunikation (autentisierad och krypterad) för all kommunikation med databasen.




Nyheter för månaden:
  • För att minska risken för att exponera sårbarheter kommer versionerna av olika mjukvaror att döljas och vilka uppdateringar som har gjorts kommer inte att publiceras. Uppdateringar av alla mjukvara sker kontinuerligt för att täppa till alla kända säkerhetshål.
  • Är man kund och behöver veta exakt vilken version som körs så skicka en fråga till supporten.

2019-09-30

Oktober 2019 - OWASP Proactive C2: Leverage Security Frameworks and Libraries


En utvecklare har inte alltid tillräckligt med kunskap, tid eller budget för att implementera den säkerhet som krävs. Genom att använda bibliotek och ramverk som tillhandahåller den säkerhet som behövs så uppnås säkerhetsmålen mer effektivt och mer korrekt.

Hur implementera?
1. Använda bibliotek och ramverk från kända källor som underhålls och används av många applikationer.
2. För en lista på alla tredjepartsbibliotek som används.
3. Håll bibliotek och komponenter uppdaterade. Använd gärna verktyg för att kontrollera mot kända sårbarheter: OWASP Dependency Check och Retire.JS.
4. Exponera så lite som möjligt av biblioteken för att minska attackmöjligheterna.


System och tjänster som uppdaterats sedan förra uppdateringen:
  • s04
    • Inget nytt.

2019-09-18

September 2019 - Backup av Google Calendar

Jag är till stor del beroende av Google Calender för att planera vad jag ska jobba med och göra på dagarna. Även saker som ska göras om exempelvis 5 år som att förnya mitt pass lägger jag in vid ett passande datum. Just pass är lagom att förnya 6 månader innan det går ut då det finns en del länder som kräver att man har ett pass med minst 6 månaders giltighetstid vid inresan. Även förnyelse av vaccinationer och allt annat jag tycker är viktigt att faktiskt inte tappa bort.

Om man som jag är så beroende av Google Calendar så skulle det vara ödesdigert om kalendern helt plötsligt inte fungerade av någon anledning. Det kan vara att Google Calendar ligger nere eller att någon tagit över ditt konto och rensat allt du lagt in eller att någon kalendermjukvara du använder för att hantera din kalender löper amok och rensar lite sporadiskt.

Den lösning jag som nu implementerat är att helt enkelt automatiskt ta regelbundna backuper av mina kalendrar i Google Calendar. För det så använder jag en Raspberry Pi med en extern hårddisk kopplad till sig. Den kör Raspian som är en version av Debian, dvs. Linux.

Surfa först till https://calendar.google.com/calendar/r/settings och klicka på den kalender du vill ta backup på. Skrolla ner tills du ser "Hemlig adress i iCal-format". Den ser ut ungefär så här:
https://calendar.google.com/calendar/ical/xxxxx/basic.ics

Skapa ett bash script på din Linuxmaskin:
#!/bin/bash
now=`date + “%Y-%m-%d”`
backup_folder=”/media/disk1/backup/google_calendar”
wget --output-document $backup_folder/calendar_name1_$now.ics <ical URL>

Byt ut name1 till vad filen ska heta och <ical URL> till rätt ical-adress. I mitt fall blir det:
wget --output-document $backup_folder/calendar_min_kalender_$now.ics https://calendar.google.com/calendar/ical/xxxxx/basic.ics

Jag lägger mina backuper i foldern /media/disk1/backup/google_calendar/ som går till den externa hårddisken. Har man flera kalendrar så är det bara att lägga till fler rader med wget. Jag har just nu 3 kalendrar som jag tar backup på.

Scriptet schemalägger jag med cron och kör det en gång per vecka.

Då varje fil får ett nytt namn så kommer det bli minst en ny fil varje vecka så tänk på att städa upp bland backuperna regelbundet. Jag har ett annat bash-script som jag kör varje vecka som tar bort alla filer som är äldre än 62 dagar (ca 2 månader):
#!/bin/bash
backup_folder=”/media/disk1/backup”
find $backup_folder/google_calendar -type f -mtime +62 -exec rm -f {} \;

Det är förberett för att hantera andra typer av backuper som ex. Google Drive, Wunderlist och Microsoft To Do och det är bara att lägga till de foldrar man vill rensa från.


System och tjänster som uppdaterats sedan förra uppdateringen:

2019-08-26

Augusti 2019 - OWASP Proactive C1: Define Security Requirements

Steg 1 är att upprätta en lista med de säkerhetskrav en mjukvara (applikation, webbplats o.dyl.) ska uppfylla.

OWASP har ett projekt där de tagit fram ett dokument med många av de säkerhetskrav som bör uppfyllas av en applikation: OWASP Application Security Verification Standard (ASVS) Project
Det är en ganska diger lista som bör täcka in det mesta som man bör tänka på.

Om man använder säkerhetskraven på ett lyckat sätt så består det av följande steg:
1. Välj ut - Välj ut de krav som ska uppfyllas i en release. Välj ut lagom många i varje release. Iterera sen och implementera fler och fler.
2. Undersök och dokumentera - Undersök hur väl applikationen uppfyller säkerhetskraven och dokumentera det.
3. Implementera - Modifiera applikationen till att uppfylla säkerhetskraven.
4. Testa - Testa att säkerhetskraven är uppfyllda.


System och tjänster som uppdaterats sedan förra uppdateringen:

2019-07-01

Juli 2019 - Inline Google Spreadsheet Viewer (Wordpress plugin)

Tips om Wordpress plugin - Inline Google Spreadsheet Viewer

På en av mina Wordpress-siter (min personliga sida där jag lägger upp resultat från alla tävlingar och lopp jag deltar i - https://www.e7andy.se/sport/) hade jag en stor HTML-tabell (old school!) med data som jag uppdaterade och underhöll. Visst tog jag backup av Wordpress-siten, men det kan vara ganska bökigt att återställa data så att den blir precis som tidigare. Då tänkte jag att jag tar en backup och lägger i ett kalkylark på Google Drive, men då blir det dubblering av data vilket är väldigt onödigt. Det kommer ofelbart att hamna ur synk. Det slog mig då att det kan ju finnas en plugin till Wordpress som kan läsa från ett kalkylark och visa upp det på en Wordpress-sida.

Det blev mycket bättre än jag någonsin kunde önska - https://www.e7andy.se/sport/
Funktioner som jag fick per automatik var sortering på valfri kolumn och en sökfunktion så att man blixtsnabbt kan filtrera fram det man önskar se. Den ser även till att anpassa tabellen utifrån bredden på den webbläsare man använder och kollapsar ner data som inte kan visas till en lista för varje rad.
Alla ändringar gör jag nu direkt i Google Drive istället för att gå in i Wordpress. Att redigera sidor i Wordpress är ju inte alltid det enklaste.
Det tar lite tid innan uppdateringarna visas på Wordpress-sidan. Det kan vara någon cachningsfunktion. Jag har inte kollat på det för så som jag använder pluginen så kvittar det att det tar en stund innan ändringarna visas.

Om man vill så går det att konfigurera väldigt mycket för hur kalkylarket ska visas. Jag har gjort några enklare ändringar:
[gdoc key="xxx" datatables_paging="false" datatables_order='%5B%5B 2, "desc" %5D%5D']My competitions and races[/gdoc]

key - Länk till kalkylarket. Det måste vara publikt minst via en länk.
datatables_paging="false" - Slår av paginering så att allt visas på en sida.
datatables_order='%5B%5B 2, "desc" %5D%5D' - Sorterar på kolumn 2 (kolumnindex startar på 0). %5B och %5D beror på att man måste koda om "[" och "]".



System och tjänster som uppdaterats sedan förra uppdateringen:
  • s04
    • Inga större ändringar.

2019-06-12

Juni 2019 - OWASP Top 10 Proactive controls

OWASP (Open Web Application Security Project) har tagit fram en lista med de viktigaste säkerhetsteknikerna som bör användas i alla mjukvaruprojekt:
OWASP Top 10 Proactive Controls

C1: Define Security Requirements
C2: Leverage Security Frameworks and Libraries
C3: Secure Database Access
C4: Encode and Escape Data
C5: Validate All Inputs
C6: Implement Digital Identity
C7: Enforce Access Controls
C8: Protect Data Everywhere
C9: Implement Security Logging and Monitoring
C10: Handle All Errors and Exceptions

Det finns en PDF som beskriver dem utförligt: Länk till PDF
Framöver kommer jag gå igenom alla punkterna en efter en.


System och tjänster som uppdaterats sedan förra uppdateringen:

2019-05-24

Maj 2019 - OWASP Zed Attack Proxy (ZAP)

OWASP Zed Attack Proxy (ZAP) är ett av världens mest populära gratis säkerhetsverktyg. Det kan automatiskt hitta säkerhetsproblem i webbapplikationer och webbsidor. Det är oerhört snabbt och enkelt så det finns inga ursäkter att låta bli.

I sin enklaste form så startar man ZAP och skriver in den URL man vill att den ska attackera och trycker på Attack. Den kommer då använda mängder med kända attackvektorer och försöka utnyttja dem.

Vill man göra lite mer utförliga tester så kan man starta en webbläsare där ZAP lägger sig som en proxy och fångar all kommunikation mellan klient (webbläsare) och webbserver. Klicka runt och använd webbapplikationen så mycket som möjligt eller fokusera på känsliga punkter som inloggning och inmatning av data.

ZAP kommer producera ett antal alerts som man kan sen kan undersöka vidare. Klicka på dem så får man mängder med information om vad det potentiella säkerhetsproblemet består av och hur man kan åtgärda det med länkar till ytterligare information.

Du kommer garanterat få många alerts, men de ska ha en risknivå som är låg eller möjligtvis medium. Ligger man högre än så så bör man verkligen ta tag i problemet genast.
Även om det är ens privata webbplats med lite bilder och text om en själv som är ointressant för de flesta så bryr sig inte de automatiska bot:arna om det. De ser bara ett öppet säkerhetshål och tar sig in där eller så kan det vara godartade bot:ar som accessar sidor för de indexerar webbsidor, typiskt Google och andra sökmotorer och råkar trilla in genom ett säkerhetshål och gör massor med skada. I mina yngre dagar så hade jag skapat ett admin-verktyg till en av mina webbplatser som hade ett allt för dåligt inloggningsskydd vilket gjorde att just en indexeringsbot gick in där och började indexera alla Delete-sidor vilket gjorde att den tömde halva min databas. Ingen större skada skedd då jag lade in en backup, men har man otur så sitter man där utan aktuell backup och förlorar mängder med data.


System och tjänster som uppdaterats sedan förra uppdateringen:
  • s04
    • Inga ändringar.

2019-04-12

Mars/April 2019 - Dokumentera mera, dokumentera allt!

Hur många kommer ihåg hur man gjorde en viss uppgift för 2 år sedan eller vad man gjorde för att lösa ett problem med någon applikation som spottade ur sig ett felmeddelande för några månader sedan? 

När jag arbetar så har jag funnit hur oerhört viktigt det är att dokumentera det man gör. Utan dokumentation är det svårt att veta vad man tidigare gjort och hur man tänkte då man gjorde det. Sen händer det ganska ofta att man börjar jobba med något som man tvingas avbryta för att sen dagar eller veckor senare ska starta upp igen. Då måste man ofta göra om allt man gjorde första gången.

Därför skapar jag dokument direkt. Det brukar börja med ganska ostrukturerad information där jag bara lägger till texter, länkar, kod etc efter hand som det kommer. Om det senare är något som är värt att spara så renskriver jag det i ett nytt dokument som läggs till dokumentationen. Om det inte är värt att renskriva så brukar jag ändå spara dokumentet och en folder döpt till "arkiv". Man vet aldrig när det kan komma till nytta i framtiden.

För större saker som jag direkt vet kommer bli en instruktion eller processbeskrivning så strukturerar jag det bättre. Oftast punktlistor. Gärna med mycket länkar till där jag hittade informationen. Exempelvis så finns uppsättning av webbhotellet in i minsta detalj beskrivet för att jag snabbt och enkelt ska kunna konfigurera en helt ny server. Varje gång jag ändrar någon konfiguration så uppdaterar jag relevant dokument med den informationen.

Jag har även ett dokument med lösningar för olika problem som dyker upp på webbhotellet. Det finns oftast ett felmeddelande och det leder sedan till en lösning. Nästa gång samma eller liknande felmeddelande dyker upp så kan jag enkelt göra en sökning på det i min dokumentation och hitta lösningen och de länkar jag använde för att lösa problemet.

Från början dokumenterade jag allt i ett privat forum som bara jag hade access till, men efter några år tyckte jag att det var väldigt omständligt att göra ändringar, backuper tog tid och forumet var tvunget att uppdateras hela tiden för att inte låta några säkerhetshål finnas kvar som kunde förstöra forumet. Därför flyttade jag allt till Google Drive

Google Drive är i princip en hårddisk online eller i molnet som man säger, men det är också så mycket mer. Google har sina egna dokumentformat som inte tar något utrymme alls så det är väldigt fördelaktigt att skriva allt i Google Dokument eller Kalkylark. Jag har ändå köpt till utrymme för att kunna lagra alla mina foton där (jag är medveten om Google Photos som jag också använder, men foton hanteras inte på det sätt jag vill där).

Utöver lagringen så sköter man även allt skrivande direkt i webbläsaren. Alla ändringar sparas blixtsnabbt direkt i dokumentet utan att man behöver tänka på att spara. Det finns för övrigt inte ens någon funktion för att manuellt spara utan det sköts automatiskt.

En mycket kraftfull funktion är att man kan vara flera personer samtidigt inne i ett dokument och göra ändringar precis samtidigt. Det är bara att dela dokumentet med de personer som ska få göra ändringar. Det går även att begränsa access till att bara titta på dokument och göra kommenterer.
Jag använder det här väldigt mycket i de olika organisationer jag är med i som idrottsföreningar och företag. Det gör att alla som behöver tillgång till ett dokument kan göra ändringar utan att dokument lagras hemma på folks datorer och riskerar att komma bort eller bli förstörda.


System och tjänster som uppdaterats sedan förra uppdateringen:
  • s04
    • Autokonfigurering av epostinställningar är nu aktiverade. Om din epostklient har stöd för det så hämtas rätt inställningar från mailserverna och konfigurerar din epostklient. Testa gärna och se hur det fungerar.
    • Minnesproblemet är äntligen löst. Det som löste det var att konfigurera PHP-FPM (FastCGI Process Manager - Den sköter exekveringen av PHP-kod) med bättre värden. Anledningen till att minnet tog slut var att antalet barn som varje PHP-FPM-process kunde starta default var satt till 9999. Det gjorde att om en sida hamnade under hård press exempelvis vid en attack så spawnades mängder med nya barnprocesser som var och en drar cirka 500 MB. En enda site kunde då uppta 5 TB av RAM-minnet. Nu är värdet satt betydligt lägre (50) och barnen dör snabbare när de inte använts på ett tag. Det går att tweaka varje site individuellt så om det behövs går det att öka vissa och minska vissa beroende på hur aktiva besökare man har.

2019-02-05

Februari 2019 - Backup av Wordpress

Jag läst nyligen om ett webbhotell som bara stängde ner och försvann (hemsida.net). Helt plötsligt så upphörde deras verksamhet och kunderna sitterna nu där med nedstängda webbsidor och kan inte komma åt filer eller mail. Enda alternativet för dem är att börja om från början på ett nytt webbhotell.

När man anlitar ett webbhotell så lämnar man över ansvaret för driften till dem för att man ska slippa göra det själv. Webbhotellets jobb är att sköta driften av servrar och se till att allt fungerar som det ska och åtminstone ha en basal backupfunktionalitet. Det man absolut minst förväntar sig är att de bara ska stänga ner en dag helt utan förvarning.

Det här är ju ett extremfall. Ingen seriös företagare agerar på det sättet utan man ser till att stänga ner sin verksamhet på ett kontrollerat sätt där man åtminstone ger kunderna tillgång till sin data och informerar om vad som kommer att hända. Man kan ju ändå tänka på ett extremfall exempelvis då företagarna dör i en olycka. Ingen kommer då ta ansvaret för att stänga ner verksamheten kontrollerat utan det kommer bara sakta dö när företaget inte längre betalar sina fakturor och kunderna kommer inte få någon information.

Jag ser primärt två saker som är viktiga att rädda:
1. Webbsidorna - Filer och databas
2. Mail

Punkt 1 löser man med backup. För att vara säker mot ovanstående incident så ska backupen lagras externt. I mina egna Wordpressinstallationer kör jag BackWPup som tar en backup en gång i månaden och lagrar på Dropbox.

Punkt 2 löser man genom att vidarebefordra alla mail till Gmail eller annan stor mailleverantör som garanterat inte stänger ner utan att informera om det i god tid. Gmail använder jag för alla mina mail.

Vad händer om något oförutsett händer med mig då? För mitt webbhotell har jag sett till att alla mina kunder får mail med information om vad som hänt och att de då har en liten tid på sig att ta hand om sin data och flytta den till ett annat webbhotell.


System och tjänster som uppdaterats sedan förra uppdateringen:
  • s04
    • Det var en incident för några dagar sedan där ett certifikat blev felaktigt vilket gjorde att flera tjänster gick ner som använde det certifikatet. Det tog någon timme att få ordning på det. Certifikat gör att allt blir säkrare, men det blir också mindre robust. En liten störning får stora konsekvenser då alla certifikat måste fungera.
    • PHP7.0-curl (curl_exec) är installerad vilket ger möjlighet till att skicka backuper med exempelvis BackWPup till Dropbox.

2019-01-15

Januari 2019 - Nytt år!

Under 2018 färdigställdes den nya servern (s04) enligt plan med bättre prestanda och nyare mjukvara: Debian 9 64-bit och PHP7. Alla konton är flyttade dit.

Som vanligt så använder jag januari på det nya året för att i lugn och ro avsluta föregående år och verkligen göra klart allt. I slutet av 2018 slutade jag använda bokföringsprogrammet Speedledger och gick över helt till Bokio och bokslutet är alltid spännande att se hur lätt eller svårt det är att slutföra. Speedledger gav myckt stöd, men Bokio gav ännu mer så jag är väldigt nöjd. Jag har redan bokfört allt för 2018, gjort momsrapport, gjort bokslut och startat upp det nya bokföringsåret. Allt administrativt för företaget 2018 är klart!

Nu när det viktigaste är avklarat så kan jag istället ägna mig åt andra projekt som blivit lite eftersatta den senaste tiden och även unna mig att njuta av vinteraktiviteter som längdskidåkning och utförsåkning. Det är ju inte så ofta snö i Göteborgstrakten. För längdskidåkning "fuskar" jag och åker inomhus i Skidome.


System och tjänster som uppdaterats sedan förra uppdateringen:
  • s04
    • Justerade inställningarna för "oom killer" (out-of-memory killer som körs då minnet på servern blir lågt) så att den undviker att döda databasservern. Databasservern dödar den annars gärna eftersom den drar mycket minne. Genom att justera OOM-värdet till negativt så dödar den andra processer först.