htaccess without htpasswd

in nginx config:
auth_basic              "-- Clasified area --";
auth_basic_user_file    /var/www/htpasswd;


In apache config:
The htaccess file:
AuthName "-- Clasified area --"
AuthType Basic
AuthUserFile /var/www/htpasswd
require valid-user

The file can be created by: 
# echo "user:$(openssl passwd -apr1)" >> /var/www/htpasswd
Udgivet i Knowledge Base | Skriv en kommentar

Sikkerhedsfejl i WordPress

WordPress er i sikkerhedsbranchen kendt som en blanding af et mareridt og en syg joke, primært fordi at WordPress er enten direkte eller indirekte skyld i at rigtig mange websites bliver hacket.

Meget af det skyldtes godtnok temaer, plugins og dovne admins, men det her er altså et eksempel på en hjerneblødning fra udviklernes side.

WordPress’ login rutine lækker information, navnligt kan du bruge den til at gætte brugernavne med, idet fejlbeskeden varierer alt afhængig af om du har tastet brugernavn eller password forkert, som du kan se herover.

Det betyder at du kan starte med at prøve en lang liste af brugernavne, hvor af “admin”, “administrator” osv. typisk vil være det første, men at køre en liste over alle danske navne igennem vil f.eks. ikke tage længere end en dags tid. En af konsekvenserne heraf er at WordPress rigtig ofte er udsat for såkaldte bruteforce angreb, dvs. angreb hvor en angriber simpelthen prøver samtlige ord i ordbogen som passwords.

Hvordan løser vi det så?

Jo jeg har fundet et plugin, WordPress Login LockDown ( https://wordpress.org/plugins/login-lockdown/ ), og ved et hurtigt gennemsyn opfylder det mine minimumskrav til plugins:

* Det virker 😉
* Det er aktivt udviklet, i skrivende stund er sidste opdatering 3mdr gammel, og den er testet med den aktuelle WordPress version.
* Der tigges ikke om penge eller donationer på upassende måder, der indsættes et link på login siden, men dette kan dog slåes fra.
* Kildekoden er letlæseligt og der er ikke umiddelbart gjort forsøg på at skjule noget. (Ja jeg har læst kildekoden.)

Opsætningen er nem, jeg anbefaler disse 3 tjekbokse udover default indstillingerne:

Grunden til at jeg skjuler credit-link er at jeg ikke ønsker at fortælle en potentiel angriber hvilke plugins jeg kører, da det er en viden der af en potentiel angriber kan misbruges.

Derudover får du beskyttelsen mod bruteforce-angreb, hvis du er god til at glemme dine kode kan du roligt sætte tallet lidt op, jeg vil foreslå max 10 forsøg.

Herefter ser et ugyldig login, uanset om det er brugernavn eller password der er forkert, således ud:

Nok snak … se så at få det installeret! 🙂

Udgivet i Knowledge Base, Old Base, Wordpress | Skriv en kommentar

Apache2 mod_log_forensic

Er du også træt af at hackere roder rundt på dit webhotel? Nåh ikke … nå men jeg har altså et par kunder der koder cirka ligeså godt som smeden laver konfekture … og det har været lidt en udfordring at finde ud af hvordan hackerne kommer ind når man ikke kender koden. I den situation er det rart at kunne genskabe de requests en angriber laver … og der kommer mod_log_forensic ind i billedet, det er et modul til Apache der logger hele requesten.

apt-get update
apt-get upgrade
apt-get install apache2-utils apache2 libapache2-mod-php5 vim

Rediger /etc/apache2/sites-enabled/000-default og sæt flg. ind i VirtualHost blokken:

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" \"%{forensic-id}n\"" combined-fid
ForensicLog /tmp/forensic.log

og ret:

CustomLog ${APACHE_LOG_DIR}/access.log combined

til:

CustomLog ${APACHE_LOG_DIR}/access.log combined-fid

Afslut med:

a2enmod log_forensic 
/etc/init.d/apache2 restart

Tast nu serverens ip i din browser og refresh et par gange, og tjek så din accesslog:

root@mcsweb:~# tail -n1 /var/log/apache2/access.log 
10.0.0.2 - - [24/Feb/2016:22:48:03 +0000] "GET / HTTP/1.1" 200 485 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4" "11709:56ce3323:0"

Her ser du din almindelige log-linie, med med et forensics id tilføjet. Første del af forensics id’et (11709) er process-id på den apache process der har serviceret klienten. Forensics id kan bruges til at slå op i forensics loggen med:

root@mcsweb:~# cat /tmp/forensic.log | grep 11709:56ce3323:0
+11709:56ce3323:0|GET / HTTP/1.1|Host:mcsweb.mikjaer.com|Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8|Connection:keep-alive|Cookie:PHPSESSID=rdurmvuiulrefbud44aviun0c7; user=John+Doe|User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4|Accept-Language:da-dk|Cache-Control:max-age=0|Accept-Encoding:gzip, deflate
-11709:56ce3323:0

Har har du både post og get variabler, http headers, coockies, url … ja generelt alt hvad du skal bruge for at kunne genskabe requesten.

Lige pt. anvender jeg det bare som beskrevet her, men jeg har overvejet at koble noget automatik på der automatisk detekterer og logger hackerangreb.

Udgivet i Apache, Knowledge Base, Linux, Old Base | Skriv en kommentar

Tripwire

Her er en quick’n’dørty guide til at få Tripwire op at køre og monitorere et websites webdir … sådan just-in-case du forventer at få ubudne gæster, så er det rart at vide hvad de har pillet i 🙂

Først installeres softwaren:

apt-get install tripwire

Under install skal du indtaste (oprette) password til den krypterede database.

Så redigerer du tw.pol og kører

/etc/tripwire # twadmin --create-polfile twpol.txt

efterfulgt af

# tripwire --init

Begge gange bliver du bedt taste din kode.

Du kan efterfølgende, for at teste, køre

tripwire --check

Der skulle også være sat et cronjob op til at køre den én gang om dagen.

Her er et eksempel på en config fil:

@@section FS                                                                                             
                                                                                     
SEC_BIN       = $(ReadOnly) ;                                                        
SIG_HI        = 100 ;                                                                
                                                                                     
(                                                                                    
  rulename = "Website.com webdir",                                              
  severity = $(SIG_HI)                                                               
)                                                                                    
{                                                                                    
        /var/www/website.com/htdocs/ -> $(SEC_BIN) ;                            
}

 

Udgivet i Knowledge Base, Linux, Old Base | Skriv en kommentar

Sådan bygger du en ny kerne på Debian og Ubuntu Linux

Ja det er faktisk ret simpelt men jeg havde selv brug for at få det opfrisket da jeg rendte ind i et USB netkort som havde den mest bizare fejl jeg nogensinde er rendt på … netkortet døde når jeg loggede ind på maskinen via ssh på det ramte netkort, og f.eks. cat’ede en logfil.

Jeg talte med nogle forskellige folk og vi kom frem til at det nok var smart at prøve den nyeste kerne og se om ikke problemet var løst, der var et par bugs i driveren som var blevet rettet men som Debian ikke havde fulgt op på.

Ideen er at vi ender med en .deb pakke som vi efterfølgende kan installere på flere maskiner, start med at hente linux kernen:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.3.3.tar.xz

Der skal bruges lidt pakker til arbejdet:

apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc kernel-package

Pak tarballen ud og hent config fra dit nuværende system, dette bevirker at alle compile-indstillinger som debian folkene har valgt at køre med automatisk overføres til din kommende build:

tar xvf linux-4.3.3.tar.xz
cd linux-4.3.3/
cp /boot/config-3.16.0-4-amd64 .config

Derefter køres config processen:

make menuconfig
make-kpkg clean

Jeg ændrede ikke noget, jeg gemte blot config som den var … jeg er ikke klar over om det ændrede noget, men umiddelbart vil jeg forvente at evt. nye parametre vil blive tilføjet i den process om nødvendigt, og hvis du har behov for at slå noget til/fra giver det jo sig selv 🙂

Selve build processen kører i ét snuptag (-j 2, skal ændres til antallet af kerner på det system der kompillerer kernen):

fakeroot make-kpkg --initrd --revision=1.0.FW kernel_image kernel_headers -j 2

Revisionen bestemmer du selv, og er primært til internt brug. Så hvis du f.eks. bygger en kerne til alle dine webservere kunne du kalde den 1.0-web og så rulle versionsnummeret hvergang du bygger en ny kerne.

Lav en kop kaffe, se et afsnit af Dr. who eller hvad du nu har lyst til for det tager lidt tid, når den er færdig har du to .deb filer som du kan installere:

dpkg -i linux-headers-4.3.3_1.0.FW_amd64.deb linux-image-4.3.3_1.0.FW_amd64.deb

Reboot og nu skulle din nye kerne gerne boote automatisk.

Godnat, og sov godt 🙂

Udgivet i Knowledge Base, Linux, Old Base | Skriv en kommentar

Pound Loadbalancer Quick Reference

I just stumbled upon this thing at a clients setup … so im in the process of learning this.

Status of the Load Balancer:

# poundctl -c /var/run/pound/poundctl.socket
  0. HTTPS Listener xx.yy.zz.176:443 a
    0. Service active (15)
      0. Backend 192.168.1.20:80 active (5 0.000 sec) alive
      1. Backend 192.168.1.21:80 active (5 0.000 sec) alive
      2. Backend 192.168.1.22:80 active (5 0.000 sec) alive
 -1. Global services

To disable 192.168.1.21 :

# poundctl -c /var/run/pound/poundctl.socket -b 0 0 1

To enable:

# poundctl -c /var/run/pound/poundctl.socket -B 0 0 1

 

Udgivet i Apache, Backdoors | Skriv en kommentar

SSH Keys på en USB Stick (OsX)

Jeg har strikket to små shellscripts sammen der kan hhv. loade og unloade mine ssh nøgler fra en USB Stick på min OSX Maskine.

load_ssh_private.sh:

#!/usr/bin/env bash
cd "$(dirname "$0")"
/usr/bin/ssh-add -t 4H ./id_rsa
exit 0

unload_ssh_private.sh:

#!/usr/bin/env bash
cd "$(dirname "$0")"
/usr/bin/ssh-add -d ./id_rsa
exit 0

Filerne skal ligge i samme mappe som din id_rsa fil og du skal chmod +x’e begge filer, derudover skal du vælge at åbne dem med programmet “Terminal” og hvis du ønsker at scriptet skal lukke terminal vinduet efter det er udført skal du sætte det op i indstillingerne for terminal programmet.

Udgivet i Knowledge Base, Old Base, OsX | Skriv en kommentar

How to load SSH Keys from FAT32 / Bypass permission requirement in SSH

Mounted FAT devices in UNIX System does not support permissions, hence SSH gives this warning:

$ ssh-add id_rsa
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

First you should take a second to think about the reason for this warning, once you did that you can bypass it like this:

$ cat id_rsa | ssh-add -
Identity added: (stdin) ((stdin))

Have fun kids! 😉

Udgivet i Knowledge Base, Linux, Old Base | Skriv en kommentar

Pound Loadbalancer Quick Reference

I just stumbled upon this thing at a clients setup ... so im in the process of learning this.

Status of the Load Balancer:


# poundctl -c /var/run/pound/poundctl.socket
  0. HTTPS Listener xx.yy.zz.176:443 a
    0. Service active (15)
      0. Backend 192.168.1.20:80 active (5 0.000 sec) alive
      1. Backend 192.168.1.21:80 active (5 0.000 sec) alive
      2. Backend 192.168.1.22:80 active (5 0.000 sec) alive
 -1. Global services
 To disable 192.168.1.21 : 
# poundctl -c /var/run/pound/poundctl.socket -b 0 0 1
 To enable: 
# poundctl -c /var/run/pound/poundctl.socket -B 0 0 1
Udgivet i Knowledge Base | Skriv en kommentar

Nagiosmodule for HAProxy Health monitoring

This is just a quick hack, and it could certainly be better. I.E. it could get the list af active backends automaticly, and this assumes that you only have one websites with these backends in.

I plan a projekt where im going to upgrade til Icinga … and if i do that i might rewrite all my homemade plugins and publish them on Github, but for now this is it:

#!/usr/bin/php
<?php
    $backends[] = "app01-40";
    $backends[] = "app01-50";
    $backends[] = "app02-51";
    $backends[] = "app02-41";

    $up=$down=array();

    foreach ($backends as $backend)
    {
        if (preg_match("/UP/",exec("haproxyctl show health | grep $backend")))
        {
            $up[]=$backend;
        } else {
            $down[]=$backend;
        }
    }
    $percentage = (count($up)/count($backends)*100);

    $msg = "Operating backends percentage: ".$percentage."%  |  active_backends=".count($up)."\n";

    if ($percentage != 100)
    {
        print "WARNING: $msg";
        die(1);
    }
    else
    {
        print "OK: $msg";
        die(0);
    }
?>

I ran it though NRPE and i had to give my NRPE user access to “/var/run/haproxy/admin.sock”.

Udgivet i Knowledge Base, Monitoring, Nagios, Networking, Old Base | Skriv en kommentar