Salam, pagi tadi aku bagi taklimat ringkas pasal Keselamatan Laman Web. Ni ada sikit slaid aku kongsikan. layan kan.. :)









Happy h4ckin dari pokcik gh1mau :)

Kippo SSH HoneyPOT

Posted: 25 January, 2012 in infrastructure tutorials

Lama dah update blog ni. nak buat macam, sibuk sikit.. hehehe. Ok, entry kali ni aku nak kongsi pasal setup SSH HoneyPot guna Kippo.

Ok, mari kita tengok apa itu HoneyPot
In computer terminology, a honeypot is a trap set to detect, deflect, or in some manner counteract attempts at unauthorized use of information systems. Generally it consists of a computer, data, or a network site that appears to be part of a network, but is actually isolated and monitored, and which seems to contain information or a resource of value to attackers.
Sumber : http://en.wikipedia.org/wiki/Honeypot_(computing)

Jadi kita dapat paham, honeyPot adalah satu ‘sistem’ yang disetkan sebagai perangkap untuk mengundang para attackers agar attack sistem tersebut.

Apa tujuannya?
1. Untuk tujuan pengumpulan data(statistik dan pattern).
2. Untuk mempelajari teknik baru yang digunakan oleh attacker.
3. Dan macam-macam lagi la :)

Cuba kita nengok diagram architechture honeyPot kat bawah ni.

Caption : Architecture Kippo HoneyPot

By default port Kippo adalah 2222, so kita perlu buat portforwarding dari port 22(standard ssh port) kepada port 2222. Dan kita perlukan satu lagi port pada server ni, untuk tujuan management. Attacker dari luar akan melihat port 22 ini dibuka, dan mereka akan cuba untuk ‘masuk’. Dalam kes ini, kita setkan kippo server berada pada DMZ Zone.

Attacker akan membuat port scan terhadap server ini dan mendapati port 22(ssh) dibuka. Dan attacker akan mulakan aktiviti ‘nger00t’ hehehe.

Architecture Kippo HoneyPot

Ok, sekarang ni kita tengok macam mana nak setup kippo HoneyPot ni. Aku gunakan Ubuntu Server. Pertama sekali login dalam ubuntu server korang dan jalankan command berikut :

sudo mkdir /opt/kippo
sudo apt-get install subversion
sudo apt-get install mysql-server
sudo apt-get install python-dev openssl python-openssl python-pyasn1 python-twisted python mysql-db

cd /opt/kippo/
sudo svn checkout http://kippo.googlecode.com/svn/trunk/

Kemudian kita setkan user baru dengan nama kippo(atau apa-apa nama). (kita taknak run honeyPot ni sebagai user root).

Kita buat sikit konfigurasi pada mysql server. Korang leh gunakan command kat bawah ni.

mysql -u root -p
mysql>CREATE DATABASE kippo;
GRANT ALL ON kippo.* to 'kippo'@'localhost' identified by 'katalaluan';
exit

cd /opt/kippo/doc/sql
mysql -u kippo -p kippo < mysql.sql
exit

Anda perlu mengubah konfigurasi pada fail kippo.cfg. Masukkan nama database, katanama, katalaluan.
Kemudian korang kena setkan pada iptables untuk tujuan port forward.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j REDIRECT --to-port 2222

Kita boleh mula runkan kippo honeyPot ni dengan command berikut :

su kippo
bash
/opt/kippo/start.sh

Kat bawah ni ada script yang aku buat untuk tujuan paparan data yang diperolehi dari kippo :)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="300;url=main.php">
<title>SSH HoneyPot Viewer by Hussein b. Mohamed a.k.a gh1mau</title>
<style type="text/css">
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
body {
background-image: url(DSCRT-15-7.jpg);
background-repeat: repeat;
}

.tbl_header {
color: #FFF;
}
#left-table, #right-table {
float:left;
}
#left-table {
margin-right:1px;
}
#new-table {
float:inherit
}

</style>
</head>

<body>
<?php
//setting untuk connection dengan db kippo
$host = "localhost";
$user = "root"; //username
$pass = ""; //password
$db_name = "kippo"; //nama database

$link = mysql_connect($host, $user, $pass);
mysql_select_db($db_name);

//query utk 10 most common username
$sqlusername = "select count(username), username from auth where username <> '' group by
username order by count(username) desc limit 10";
$resultusername = mysql_query ($sqlusername);

//query utk 10 most common password
$sqlpassword = "select count(password), password from auth where password <> '' group by
password order by count(password) desc limit 10";
$resultpassword = mysql_query ($sqlpassword);

//query utk success ratio
$sqlsuccess = "select count(success), success from auth group by success order by success";
$resultsuccess = mysql_query ($sqlsuccess);

//query utk 10 unique ip
$sqlip = "select count(ip), ip from sessions group by ip order by count(ip) desc limit 10";
$resultip = mysql_query ($sqlip);

?>
<h3><strong><u>SSH HoneyPot Viewer</u></strong></h3>
<p>
<?php
//paparkan data dalam table - username
echo '<table width="25%" id="left-table">
<td colspan="2" align="center" bgcolor="#990000"><strong><font color=white>Top 10 most common              username attempted   </font></strong></td>
<tr>
<td align="center" bgcolor="#990000"><font color = white><b>count(username)</b></font></td>
<td align="center" bgcolor="#990000"><font color = white><b>username</b></font></td>
</tr>';

//dapatkan data menggunkan gelung while
$bg = '#0066FF';
while ($rowusername = mysql_fetch_array($resultusername, MYSQL_ASSOC)){
$bg = ($bg == '#FFFF99' ? '#FF8888' : '#FFFF99');
echo '<tr  bgcolor="' . $bg . '">
<td align="center"><strong>' . $rowusername['count(username)'] . '</strong></td>
<td align="left"><strong>' . $rowusername['username'] . '</strong></td>
</tr>';

}

echo '</table>';
mysql_free_result($resultusername);

//paparkan data dalam table - password
echo '<table width="25%" id="right-table">
<td colspan="2" align="center" bgcolor="#990000"><strong><font color=white>Top 10 most common              password attempted   </font></strong></td>
<tr>
<td align="center" bgcolor="#990000"><font color = white><b>count(password)</b></font></td>
<td align="center" bgcolor="#990000"><font color = white><b>password</b></font></td>
</tr>';

//dapatkan data menggunkan gelung while
$bg = '#0066FF';
while ($rowpassword = mysql_fetch_array($resultpassword, MYSQL_ASSOC)){
$bg = ($bg == '#FFFF99' ? '#FF8888' : '#FFFF99');
echo '<tr  bgcolor="' . $bg . '">
<td align="center"><strong>' . $rowpassword['count(password)'] . '</strong></td>
<td align="left"><strong>' . $rowpassword['password'] . '</strong></td>
</tr>';

}

echo '</table>';
mysql_free_result($resultpassword);

//paparkan data dalam table - success ratio
echo '<table width="25%" id="right-table">
<td colspan="2" align="center" bgcolor="#990000"><strong><font color=white>Top 10 unique IP     connections </font></strong></td>
<tr>
<td align="center" bgcolor="#990000"><font color = white><b>count(ip)</b></font></td>
<td align="center" bgcolor="#990000"><font color = white><b>ip</b></font></td>

</tr>';

//dapatkan data menggunkan gelung while
$bg = '#0066FF';
while ($rowip = mysql_fetch_array($resultip, MYSQL_ASSOC)){
$bg = ($bg == '#FFFF99' ? '#FF8888' : '#FFFF99');
echo '<tr  bgcolor="' . $bg . '">
<td align="center"><strong>' . $rowip['count(ip)'] . '</strong></td>
<td align="left"><strong>' . $rowip['ip'] . '</strong></td>
</tr>';

}

echo '</table>';
mysql_free_result($resultip);

//paparkan data dalam table - unique ip
echo '<table width="25%" id="right-table">
<td colspan="2" align="center" bgcolor="#990000"><strong><font color=white>Success Ratio     </font></strong></td>
<tr>
<td align="center" bgcolor="#990000"><font color = white><b>count(success)</b></font></td>
<td align="center" bgcolor="#990000"><font color = white><b>success</b></font></td>

</tr>';

//dapatkan data menggunkan gelung while
$bg = '#0066FF';
while ($rowsuccess = mysql_fetch_array($resultsuccess, MYSQL_ASSOC)){
$bg = ($bg == '#FFFF99' ? '#FF8888' : '#FFFF99');
echo '<tr  bgcolor="' . $bg . '">
<td align="center"><strong>' . $rowsuccess['count(success)'] . '</strong></td>
<td align="left"><strong>' . $rowsuccess['success'] . '</strong></td>
</tr>';

}

echo '</table>';
mysql_free_result($resultsuccess);
mysql_close();
?>
<p>

<table width="100%" border="0" id="right-table">
<tr><td>&nbsp;</td></tr>
<tr><td>by Hussein b. Mohamed a.k.a gh1mau Version 1.0.0</td></tr>
</table>
</body>
</html>

Caption : Kippo HoneyPot viewer

Dan jenguk-jenguk la folder /opt/kippo/log/tty. Kat sana kita leh nengok apa yang attacker buat lepas dapat ‘masuk’ ke dalam server ni.

Gunakan utilities playlog.py (dlm folder /opt/kippo/utils). Macam-macam ada.. heheheh :)
Nanti insya ALLAH aku update log-log menarik yang berjaya di’tangkap’

p/s : Posting pasal rsync untuk tujuan web apache auto mirror tu aku hold dulu. Nanti ada masa aku buat la posting pasal tu :)

Happy h4ckin dari pokcik gh1mau :)

Salam semua, kali ni posting aku adalah berkaitan dengan konfigurasi clustering (load balancing) server apache. Senario dia mudah saja, kita ada 1 server loadbalancer (diset dengan Haproxy:10.55.32.47), dan 2 server web (web01:10.55.32.52, web02:10.55.32.42).

Cuba lihat logical diagram dibawah. Apabila klien mengakses web, klien akan menggunakan ip loadbalancer:10.55.32.47, dan loadbalancer akan menghantar request kepada web01.

Caption: Architecture Apache Web Clustering

Sekiranya web01 down, secara automatik, loadbalancer akan menghantar request klien kepada web02. Macam tu lah cara ianya berfungsi. Kalau kedua dua web server down, tak leh nak buat apa la :) Kena tambah lah backup server yang ketiga :)

Caption: Architecture Apache Web Clustering

Sekarang ni, kita akan bincangkan konfigurasi yang terlibat.
Bagi server web01 dan web02, kita perlu install package apache. Gunakan command seperti dibawah:

sudo apt-get update
sudo apt-get install apache2

Buat satu file pada webroot directory, file ini akan digunakan oleh haproxy untuk tujuan memastikan status server web01 dan web02 sama ada up atau down.

sudo touch /var/www/haproxytest.txt

Caption: Loadbalancer akan membuat request fail haproxytest.txt terhadap web01 dan web02 untuk mendapatkan status kedua web server ini.

Ok, sekarang ni kita akan mula setup haproxy pula. Pada server ubuntu yang lagi satu (10.55.32.47) Kita runkan command berikut :

sudo apt-get install haproxy

Kemudian kita ubah fail configuration fail haproxy(/etc/haproxy/haproxy.cfg) ini dengan configuration seperti dibawah:

global
          maxconn 4096
          user haproxy
          group haproxy
          daemon

defaults
          log     global
          mode    http
          option  httplog
          option  dontlognull
          retries 3
          option  redispatch
          maxconn 2000
          contimeout      5000
          clitimeout      50000
          srvtimeout      50000

listen webcluster 10.55.32.47:80
          mode    http
          stats   enable
          stats   auth kambing:kambing123
          balance roundrobin
          option httpchk HEAD /haproxytest.txt HTTP/1.0
          option forwardfor
          cookie biskut_gh1mau insert
          option httpclose
          server web01 10.55.32.52:80 cookie biskut_gh1mau_web01 check
          server web02 10.55.32.52:80 cookie biskut_gh1mau_web02 check

Dan kita perlu enable kan haproxy. Setkan ENABLED=1 pada fail /etc/default/haproxy. Kemudian startkan service haproxy dengan command dibawah :

sudo /etc/init.d/haproxy start

Kita boleh mengakses status page haproxy ni dengan url seperti berikut : (alamat ip adalah mengikut alamat ip anda)

http://10.55.32.47/haproxy?stats

Bila klien akses web page, klien akan diberikan satu cookie, by default cookie adalah merujuk pada web01. Cookie ini akan digunakan oleh haproxy untuk menghantar request client pada server yang berkenaan.

Caption: Klien diberikan cookie yang merujuk kepada server web01

Apabila server web01 down, kita dapat melihat perkara ini pada haproxy status page. Klien masih boleh mengakses web page lagi kerana web02 masih up.

Dan kita dapat lihat cookie pada klien sudah berubah.

Caption: Klien diberikan cookie yang merujuk kepada server web02

Ok, tamatlah berkenaan dengan apache webclustering. Kalau di tanya apa tujuan clustreing ni, jawapan mudahnya adalah untuk tujuan high availability.

Ini merupakan konfigurasi yang asas. Ada beberapa masalah dalam konfigurasi ini :

  1. Kalau kita lihat content dalam web01 dan web02 boleh jadi tak sama sekiranya hanya web01 diupdate, kita akan gunakan rsync untuk tujuan sync content.
  2. Sekiranya loadbalancer/haproxy down, maka server web (web01 dan web02) tidak dapat diakses. Untuk tujuan ini kita perlukan 2 server loadbalancer/haproxy dengan konfigurasi heartbeat.
  3. Konfigurasi apache logfile

Insya ALLAH aku akan cuba kongsikan teknik-teknik tersebut dalam posting akan datang.

Happy ha4kin dari pokcik gh1mau :)