Notepad ~Angky R~

Block Mailing-list menggunakan header_checks POSTFIX [part two]

FreeBSD No Comments

Sambungan dari……block-mailing-list-menggunakan-header_checks-postfix-part-one

June 2nd, 2006

Waduh, sudah sekian hari rasanya sibuk terus nih kerjaan….jadi terlupakan janji yang satu ini nih. Sebenarnya tadinya mau bikin documentasi dengan topik lain sih, tapi berhubung yang ini belum selesai (tangguh banget sih) ya dengan senang hati kita lanjutkan kembali…..!!!

OK, dari pada banyak cingcong…kita langsung bahas saja….mmm, sampe dimana ya kemaren?

O iya, mau nerangin masalah isi header_checks dan cara testingnya saja kan?..OK

dikarena header_checks yang saya gunakan menggunakan regex_table, maka ada baiknya kita baca-baca dulu mengenai regex_table di postfix…yuuu mang http://www.postfix.org/regexp_table.5.html

Sekarang saya asumsikan sudah sedikit mengerti mengenai regex_tablenya posfix (padahal saya aja kurang paham…hikhikhik)

terlihat pada isi file /etc/postfix/header_checks ada

/^List-Id: /!/< *\.linux\.or\.id|id-freebsd|stibanas-c3\.yahoogroups\.com/ REJECT
yang artinya, jika pada header email mengandung kata List-Id (biasanya pada setiap milis selalu ditambah dengan “List-Id” pada setiap headernya, dimana ini juga menandakan nama dari milis tersebut, tapi ngak dijadikan RFC juga sih ada beberapa yang ngak pake juga, tapi kalo ngomong pada umumnya memang begitu :-D ) berarti email yang diterima merupakan kelompok dari milis dan biasanya ini merupakan id atau nama dari milis tersebut, contoh :

“List-Id:Tanya Jawab umum Seputer Linux (tanya-jawab.linux.or.id)”

Ini berarti id milis untuk tanya-jawab@linux.or.id. Nah agar postfix bisa membacara header dan mencari kata List-Id, maka pada header_check harus di tambah tanda “/^List-Id: /” dan karena saya akan memblok semua Mailing-list yang akan masuk tetapi hanya beberapa yang boleh, maka saya tambahkan tanda “!” yang artinya kecuali kemudian saya sebut nama-nama milist yang boleh lewat. Jika nama milis lebih dari satu, maka harus menambahkan tanda “|” yang artinya “atau” (or) sebagai contoh saya ingin melewatkan milis id-freebsd@yahoogroups.com dan stibanas-c3@yahoogroups.com dimana penulisan lengkapnya adalah :

/^List-Id:/!/

terlihat setelah kata stibanas-c3 ada tanda “\” ini memang aturan jika kita akan menyertakan tanda “.” (dot) sehinnga oleh postfix akan di baca lengkap adalah List-Id: id-freebsd.yahoogroups.com atau Lis-Id: stibanas-c3.yahoogroups.com.

Nah kalo dari penulisan berikut

/^List-Id: /!/< *\.linux\.or\.id|id-freebsd|stibanas-c3\.yahoogroups\.com/ REJECT

dibaca menjadi, semua yang mengandung List-Id akan di reject kecuali yang mengandung List-Id: *.linux.or.id (semua milis linux.or.id) atau List-Id: id-freebsd.yahoogroups.com atau List-Id: stibanas-c3.yahoogroups.com, ya mungkin kira2 berikut karena selama ini saya terapkan seperti itu ok-ok saja, belum menemukan masalah.

Sedangkan untuk mengetest apakah regex_tables yang kita tulis di header berfungsi dengan baik adalah dengan perintah berikut :

buat file yang mengandung List-Id dan memberikan nama sembarang kemudian test dengan perintah postmap

# echo “List-Id: test.yahoogroups.com” > msg_file

# postmap -q – regexp:/etc/postfix/header_checks < msg_file

list-id: REJECT

#

Ini menandakan kita berhasil mereject milis test@yahoogroups.com, dan jika kita test dengan milis dibolehkan, maka

# echo “List-Id: id-freebsd.yahoogroups.com” > msg_file

# postmap -q – regexp:/etc/postfix/header_checks < msg_file

#

Maka hal ini akan meloloskan email yang mengandung kata tersebut, jadi kesimpulannya adalah…..sesuai yang

Sebagai Penutup, saya ucapkan terima kasih dan mohon maaf jika ada kesalahan, jika mau mengkoreksi silahkan saja isi komentarnya atau langsung kirim email ke angky@nr.or.id

Refensi:

http://www.postfix.org

http://www.seaglass.com/postfix/faq.html

Om Asfik :-)

Thanks,

Angky R

Block Mailing-list menggunakan header_checks POSTFIX [part one]

FreeBSD No Comments

Ternyata tulisan ini yang jadul abis, masih bermanfaat bagi gw :-)

May 24th, 2006

Terkadang beberapa perusahaan ingin menghemat bandwidth dengan membatasi koneksi atau trafik lewat email, tetapi karena begitu pentingnya komunikasi via email maka kita sulit memilah dan memilih mana email yang layak diterima dan tidak.

Salah satu cara untuk menekan trafik via bandwidth yaitu dengan memblock semua mailing-list dan hanya beberapa mailing-list yang boleh masuk (karena sebagian besar mailing-list itu menggunakan email kantor, ya walaupun masih bisa diakalin dengan menggunakan email gratisan atau email yang diluar domain kantor tetap masih bisa masuk :-D )

Cara ini memang tidak menjamin 100% akan menekan trafik email, tapi setidaknya dapat menekan hingga 80% dan kita menganalogikan semua user ikut milis dengan menggunakan email kantor.

karena saya sendiri terburu waktu dan belum sempat “oprek-oprek” program yang paten dan bahkan tidak mengganggu kinerja postfik dalam memblock mailing-list ini, maka hematnya saya gunakan header_check dalam memblock milis ini.

Ya ngak recomamded juga sih, tapi dari pada dimarahin bos dan mengejar date line….mmmm akhirnya dengan terpaksa saya gunakan hal ini, dan mungkin hal ini sebaiknya digunakan hanya untuk pertolongan pertama saja :-D (tapi terkadang malah lupa dan tetap dibiarkan terus digunakan karena fungsinya udah berjalan dengan baik walaupun sedikit mengganggu kinerja postfix, ya sedikir kerja rodi lah…hihihihi)

Ok, jangan banyak bacot…mari kita kerjain :

1. aktifkan option header_checks pada postfix

[root@angky ~]# vi /etc/postfix/main.cf

header_checks = regexp:/etc/postfix/header_checks

2. buat file header_checks di /etc/postfix

[root@angky ~]# vi /etc/postfix/header_checks

/^List-Id:/!/< *\.linux\.or\.id|id-freebsd|stibanas-c3\.yahoogroups\.com>/ REJECT Maaf Milis ini tidak diterima
3. generate header_checks untuk jadi database yang dapat di baca postfix dan restart postfix

[root@angky ~]# postmap /etc/postfix/header_checks && postfix reload

Nah, apa sih isi header check? kenapa penulisannya seperti itu? mmm bagaimana cara testingnya bahwa yg kita tulis itu bisa memblock milis? ok..ok akan saya jelaskan pada sesi berikutnya deh soale laper banget nih, mau sarapan dulu…. :-D

Bersambung ke block-mailing-list-menggunakan-header_checks-postfix-part-two

Thanks,

Angky R

Linux Hardening & Security with CPanel

Linux, Security No Comments

=======================================
|———–:[INFO]:——————|
|————————————-|
| Title: “Linux Hardening & Security” |
| Author: Krun!x | QK                 |
| E-Mail: only4lul@gmail.com          |
| Home:   madspot.org | ljuska.org    |
| Date:   2009-06-20                  |
=======================================

Content:
1) Intruduction
2) cP/WHM Installation and cP/WHM Configuration
3) The server and it’s services | PHP Installation, Optimization & Security
4) Kernel Hardening | Linux Kernel + Grsecurity Patch
5) SSH
6) Firewall | DDoS Protection
7) Mod_Security
8) Anti-Virus – ClamAV
9) Rootkit
10) The Rest of Shits

===================
| 1) Intruduction |
===================

I wrote a step by step paper how to secure linux server with cP/WHM and
Apache installed. By default, linux is not secured enough but you have
to understand there is no such thing as “totally secured server/system”.
The purpose of this paper is to understand how to at least provide some
kind of security to the server. I prefer lsws web-server without any
Control Panel at all but for this paper I have used CentOS 5 with cP/WHM
and Apache web-server installed since a lot of hosting compaines and
individuals are using it.

Let’s start :)

So, you bought the server with CentOS 5 installed. If you ordered cP/WHM together with the server you can skip 2.1 step

============================================
| 2) cP/WHM installation and configuration |
============================================
2.1) cP/WHM Installation
To begin your installation, use the following commands into SSH:
root@server [~]# cd /home
root@server [/home]# wget http://layer1.cpanel.net/latest
root@server [/home]# ./latest

—————————————————————————————————–
cd /home – Opens /home directory
wget http://layer1.cpanel.net/latest – Fetches the latest installation file from the cPanel servers.
./latest – Opens and runs the installation files.
——————————————————————————————————

cP/WHM should be installed now. You should be able to access cP via
http://serverip:2082(SSL-2083) or http://serverip/cpanel and WHM via
http://serverip:2086(SSL-2087) or http://serverip/whm. Let’s configure
it now.

2.2) cP/WHM Configuration
Login to WHM using root username/passwd
http://serverip:2086 or http://serverip/whm

WHM – Server setup – Tweak Security:
————————————-
Enable open_basedir protection
Disable Compilers for all accounts(except root)
Enable Shell Bomb/memory Protection
Enable cPHulk Brute Force Protection

WHM – Account Functions:
————————-
Disable cPanel Demo Mode
Disable shell access for all accounts(except root)

WHM – Service Configuration – FTP Configuration:
————————————————-
Disable anonymous FTP access

WHM – MySQL:
————-
Set some MySQL password(Don’t set the same password like for the root access)
-If you don’t set MySQL password and if someone upload shell(E.G c99) on
some site on server he will be able to login into  the DB with username
“root” without password and delete/edit/download any db on that server

WHM – Service Configuration – Apache Configuration – PHP and SuExec Configuration
——————–
Enable suEXEC – suEXEC = On
When PHP runs as an Apache Module it executes as the user/group of the
webserver which is usually “nobody” or “apache”. suEXEC changes this so
scripts are run as a CGI. Than means scripts are executed as the user
that created them. With suEXEC script permissions can’t be set to
777(read/write/execute at user/group/world level)

===============================================================================
| 3) The server and it’s services | PHP Installation, Optimization & Security |
===============================================================================

3.1) Keep all services and scripts up to date and be sure that you running the latest secured version.
On CentOS type this into SSH to upgrade/update services on the server.
[root@server ~]# yum upgrade
or
[root@server ~]# yum update

3.2) PHP Installation/Update, configuration and optimization + Suhosin patch
First download what you need, type into SSH the following:
root@server [~]# cd /root
root@server [~]# wget http://www.php.net/get/php-5.2.9.tar.bz2/from/this/mirror
root@server [~]# wget http://download.suhosin.org/suhosin-patch-5.2.8-0.9.6.3.patch.gz
root@server [~]# wget http://download.suhosin.org/suhosin-0.9.27.tgz

Untar PHP
root@server [~]# tar xvjf php-5.2.9.tar.bz2

Patch the source
root@server [~]# gunzip < suhosin-patch-5.2.8-0.9.6.3.patch.gz | patch -p0

Configure the source. If you want to use the same config as you used for
the last php build it’s not a problem but you will have to add
enable-suhosin to old config. To get an old config type this into SSH:
root@server [~]# php -i | grep ./configure

root@server [~]# cd php-5.2.9
root@server [~/php-5.2.9]# ./configure –enable-suhosin + old config(add old config you got from “php -i | grep ./configure” here)
root@server [~/php-5.2.9]# make
root@server [~/php-5.2.9]# make install

Note: If you get an error like make: command not found or patch: Command
not found, you will have to install “make” and “patch”. It can be done
easly. Just type this into SSH:
root@server [~]# yum install make
root@server [~]# yum install patch

Now check is everything as you want. Upload php script like this on the server:
<?php
phpinfo();
?>
And open it via your browser and you will see your PHP configuration there

3.3) Suhosin
Now we can install suhosin patch to get better security and performance.
root@server [~]# tar zxvf suhosin-0.9.27.tgz
root@server [~]# cd suhosin-0.9.27
root@server [~/suhosin-0.9.27]# phpize
root@server [~/suhosin-0.9.27]# ./configure
root@server [~/suhosin-0.9.27]# make
root@server [~/suhosin-0.9.27]# make install

After you installed suhosin you will get something like this: It’s installed to /usr/local/lib/php/extensions/no-debug-non-zts-20060613/

Now edit your php.ini. If you don’t know where php.ini located it, type this into SSH.
root@server [~]# php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini

It means you have to edit /usr/local/lib/php.ini
Type into SHH:
root@server [~]# nano /usr/local/lib/php.ini
If you get an error, nano: Command not found, then:
root@server [~]# yum install nano

Find “extension_dir =” and add:
extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20060613/
To save it, CTRL + O and then Enter button.

3.4)
We will install Zend Optimizer to get better perfomance:
Download Zend Optimizer from http://www.zend.com/store/products/zend-optimizer.php
root@server [~]# tar -zxvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
root@server [~]# cd ZendOptimizer-3.3.3-linux-glibc23-i386
root@server [~/ZendOptimizer-3.3.3-linux-glibc23-i386]# ./install.sh
Welcome to Zend Optimizer installation….. – Press Enter button
Zend licence agreement…                   – Press Enter button
Do you accept the terms of this licence…  – Yes, press Enter button
Location of Zend Optimizer…               – /usr/local/Zend, press Enter button
Confirm the location of your php.ini file…- /usr/local/lib, press Enter button
Are you using Apache web-server..           – Yes, press Enter button
Specify the full path to the Apache control utility(apachectl)…-/usr/local/apache/bin/apachectl, press Enter button
The installation has completed seccessfully…- Press Enter button

Now restart apache, type this into SSH:
root@server [~]# service httpd restart

3.5) php.ini & disabled functions
Edit php.ini like this:
root@server [~]# nano /usr/local/lib/php.ini
————————————————————
safe_mode = On
expose_php = Off
Enable_dl= Off
magic_quotes = On
register_globals = off
display errors = off
disable_functions = system, show_source, symlink, exec, dl,
shell_exec, passthru, phpinfo, escapeshellarg,escapeshellcmd
————————————————————-

root@server [~]# service httpd restart

Or you can edit php.ini via WHM:
WHM – Service Configuration – PHP Configuration Editor

=========================================================
| 4) Kernel Hardening | Linux Kernel + Grsecurity Patch |
=========================================================

Description : grsecurity is an innovative approach to security utilizing
a multi-layered detection, prevention, and containment model. It is
licensed under the GPL. It offers among many other features:
-An intelligent and robust Role-Based Access Control (RBAC) system that can generate least privilege policies for your
entire system with no configuration
-Change root (chroot) hardening
-/tmp race prevention
-Extensive auditing
-Prevention of arbitrary code execution, regardless of the technique used (stack smashing, heap corruption, etc)
-Prevention of arbitrary code execution in the kernel
-Randomization of the stack, library, and heap bases
-Kernel stack base randomization
-Protection against exploitable null-pointer dereference bugs in the kernel
-Reduction of the risk of sensitive information being leaked by arbitrary-read kernel bugs
-A restriction that allows a user to only view his/her processes
-Security alerts and audits that contain the IP address of the person causing the alert

Downloading and patching kernel with grsecurity
root@server [~]# cd /root
root@server [~]# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.5.tar.gz
root@server [~]# wget http://www.grsecurity.com/test/grsecurity-2.1.12-2.6.26.5-200809141715.patch
root@server [~]# tar xzvf linux-2.6.26.5.tar.gz
root@server [~]# patch -p0 < grsecurity-2.1.12-2.6.26.5-200809141715.patch
root@server [~]# mv linux-2.6.26.5 linux-2.6.26.5-grsec
root@server [~]# ln -s linux-2.6.26.5-grsec/ linux
root@server [~/linux]# cd linux
root@server [~/linux]# cp /boot/config-`uname -r` .config
root@server [~/linux]# make oldconfig

Compile the Kernel:
root@server [~/linux]# make bzImage
root@server [~/linux]# make modules
root@server [~/linux]# make modules_install
root@server [~/linux]# make install

Check your grub loader config, and make sure default is 0
root@server [~/linux]# nano /boot/grub/grub.conf

Reboot the server
root@server [~/linux]# reboot

==========
| 5) SSH |
==========

In order to change SSH port and protocol you will have to edit sshd_config
root@server [~]# nano /etc/ssh/sshd_config

Change Protocol 2,1 to Protocol 2
Change #Port 22 to some other port and uncomment it
Like, Port 1337

There is a lot of script kiddiez with brute forcers and they will try to crack our ssh pass because they know username is root, port is 22
But we were smarter, we have changed SSH port :)
Also, their “brute forcing” can increase server load, it means our sites(hosted on that server) will be slower

SSH Legal Message
edit /etc/motd, write in motd something like this:
“ALERT! That is a secured area. Your IP is logged. Administrator has been notified”

When someone login into SSH he will see that message:
ALERT! That is a secured area. Your IP is logged. Administrator has been notified

If you want to recieve an email every time when someone logins into SSH as root, edit .bash_profile(It’s located in /root directory) and put this at the end of file:
echo ‘ALERT – Root Shell Access on:’ `date` `who` | mail -s “Alert: Root Access from `who | awk ‘{print $6}’`” mail@something.com

And at the end restart SSH, type “service sshd restart” into SSH

=================================
| 6) Firewall | DDoS Protection |
=================================

6.1) Firewall, CSF Installation
root@server [~]# wget http://www.configserver.com/free/csf.tgz
root@server [~]# tar -xzf csf.tgz
root@server [~]# cd csf

In order to install csf your server needs to have some ipt modules
enabled. csftest is a perl script and it comes with csf. You can check
those mudules with it.
root@server [~/csf]# ./csftest.pl
The output should be like this:

root@server [~/csf]# ./csftest.pl
Testing ip_tables/iptable_filter…OK
Testing ipt_LOG…OK
Testing ipt_multiport/xt_multiport…OK
Testing ipt_REJECT…OK
Testing ipt_state/xt_state…OK
Testing ipt_limit/xt_limit…OK
Testing ipt_recent…OK
Testing ipt_owner…OK
Testing iptable_nat/ipt_REDIRECT…OK

No worries if you have no all those mudules enabled, csf will work is
you didn’t get any FATAL errors at the end of the output.

Now, get to installation
root@server [~/csf]# ./install.sh

You will have to edit conf.csf file. It’s located here:
/etc/csf/csf.conf

You need to edit it like this:
Testing = “0″

And have to configure open ports in conf.csf or you won’t be able to
access these ports. In most cases it should be configured like this if
you are using cP/WHM. If you are running something on some other port
you will have to enable it here. If you changed SSH port you will have
to enable a new port here:
# Allow incoming TCP ports
TCP_IN = “20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,2096″
# Allow outgoing TCP ports
TCP_OUT = “20,21,22,25,37,43,53,80,110,113,443,587,873,2087,2089,2703″

6.2) CSF Connection Limit
There is in csf.conf CT option, configure it like this
CT_LIMIT = “200″
It means every IP with more than 200 connections is going to be blocked.
CT_PERMANENT = “1″
IP will blocked permanent
CT_BLOCK_TIME = “1800″
IP will be blocked 1800 secs(1800 secs = 30 mins)
CT_INTERVAL = “60″
Set this to the the number of seconds between connection tracking scans.

After conf.csf editing you need to restart csf
root@server [~# service csf restart

6.3) SYN Cookies
Edit the /etc/sysctl.conf file and add the following line in order to enable SYN cookies protection:
-----------------------------------
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
-----------------------------------

root@server [~/]# service network restart

6.4) CSF as security testing tool
CSF has an option “Server Security Check”. Go to WHM – Plugins – CSF -
Test Server Security. You will see additional steps how to secure the
server even more. I’m writing only about most important things here and
I covered most of them in the paper but if you want you can follow steps
provided by CSF to get the server even more secured.

6.5) Mod_Evasive
ModEvasive module for apache offers protection against DDoS (denial of service attacks) on your server.

To install it login into SSH and type

———————————————————————————
root@server [~]# cd /root/
root@server [~]# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
root@server [~]# tar zxf mode_evasive-1.10.1.tar.gz
root@server [~]# cd mod_evasive

then type…
root@server [~/mod_evasive]# /usr/sbin/apxs -cia mod_evasive20.c
———————————————————————————

When mod_evasive is installed, place the following lines in your httpd.conf (/etc/httpd/conf/httpd.conf)

——————————–
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</IfModule>
——————————–

6.6) Random things:
csf -d IP – Block an IP with CSF
csf -dr IP – Unblock an IP with CSF
csf -s – Start firewall rules
csf -f – Flush/stop firewall rules
csf -r – Restart firewall rules
csf -x – Disable CSF
csf -e – Enable CSF
csf -c – Check for updates
csf -h – Show help screen

-Block an IP via iptables
iptables -A INPUT -s 208.131.183.169 -j DROP

-Unblock an IP via iptables
iptables -I INPUT -s IP -j ACCEPT

-See how many IP addresses are connected to the server and how many connections has each of them.
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

===================
| 7) Mod_Security |
===================

Mod_Security is a web application firewall and he can help us to secure our sites against RFI, LFI, XSS, SQL Injection etc

If you use cP/WHM you can easly enable Mod_security in WHM – Plugins – Enable Mod_Security and save

Now I will explain how to install Mod_security from source.
You can’t install Mod_Security if you don’t have libxml2 and http-devel libraries.
Also, you need to enable mod_unique_id in apache modules, but don’t worry, I will explain how to do it :)

Login into SSH and type…

root@server [~]# yum install libxml2 libxml2-devel httpd-devel

libxml2 libxml2-devel httpd-devel should be installed now

then you need to edit httpd.conf file, you can find it here:
root@server [~]# nano /etc/httpd/conf/httpd.conf

You need to add this in your httpd.conf file
LoadModule unique_id_module modules/mod_unique_id.so

Now download the latest version of mod_security for apache2 from http://www.modsecurity.org

login into SSH and type…

root@server [~]# cd /root/
root@server [~]# wget http://www.modsecurity.org/download/modsecurity-apache_2.5.6.tar.gz
root@server [~]# tar zxf modsecurity-apache_2.5.6.tar.gz
root@server [~]# cd modsecurity-apache_2.5.6
root@server [~/modsecurity-apache_2.5.6]# cd apache2

then type:
root@server [~/modsecurity-apache_2.5.6/apache2]#  ./configure
root@server [~/modsecurity-apache_2.5.6/apache2]# make
root@server [~/modsecurity-apache_2.5.6/apache2]# make install

Go at the end of httpd.conf and place an include for our config/rules file…
Include /etc/httpd/conf/modsecurity.conf

———————————————————
# /etc/httpd/conf/httpd.conf

LoadModule unique_id_module modules/mod_unique_id.so
LoadFile /usr/lib/libxml2.so
LoadModule security2_module modules/mod_security2.so
Include /etc/httpd/conf/modsecurity.conf
———————————————————

You need to find good rules for Mod_Security. You can find them at
official Mod_Security site. Also, give a try to gotroot.com rules. When
you find a good rules, just put them in /etc/httpd/conf/modsecurity.conf

And restart httpd at the end, type “service httpd restart” into SSH

==========================
| 8) Anti-Virus – ClamAV |
==========================

You need AV protection to protect the server against worms and trojans
invading your mailbox and files! Just install clamav (a free open source
antivirus software for linux). More information can be found on clamav
website – http://www.clamav.net

In order to install CLamAV login into SSH and type

root@server [~]# yum install clamav

Once you have installed clamav for your CentOS, here are some basic commands you will need:

Update the antivirus database
root@server [~]# freshclam

Run antivirus
root@server [~]# clamscan -r /home

Running as Cron Daily Job
To run antivirus as a cron job (automatically scan daily) just run
crontab -e from your command line. Then add the following line and save
the file.
@daily root clamscan -R /home

It means clamav will be scanning /home directory every day. You can change the folder to whatever you want to scan.

==============
| 9) Rootkit |
==============

Rootkit scanner is scanning tool to ensure you for about 99.9%* you’re clean of nasty tools.
This tool scans for rootkits, backdoors and local exploits by running tests like:
-MD5 hash compare
-Look for default files used by rootkits
-Wrong file permissions for binaries
-Look for suspected strings in LKM and KLD modules
-Look for hidden files
-Optional scan within plaintext and binary files

Instalation:

Login into SSH and type

root@server [~]# cd /root/
root@server [~]# wget http://downloads.rootkit.nl/rkhunter-1.2.7.tar.gz
root@server [~]# tar -zxvf rkhunter-1.2.7.tar.gz
root@server [~]# cd rkhunter-1.2.7
root@server [~rkhunter-1.2.7]# ./installer.sh

Scan the server with rkhunter
root@server [~]# rkhunter -c

=========================
| 10) The Rest of Shits |
=========================

10.1) Random suggestions

If you use bind DNS server then we need to edit named.conf file
named.conf is located here: /etc/named.conf

and add
recursion no; under Options
—————————-
Options{
recursion no;
—————————-

Now restart bind, type into SSH
root@server [~]# service named restart

This will prevent lookups from dnstools.com and similar services and reduce server load

In order to prevent IP spoofing, you need to edit host.conf file like this:
This file is located here: /etc/host.conf
Add that in host.conf
——————
order bind,hosts
nospoof on
——————

Hide the Apache version number:

edit httpd.conf (/etc/httpd/conf/httpd.conf)
———————–
ServerSignature Off
———————–

Disable telnet:

Edit file: /etc/xinetd.d/telnet
——————
disable = yes
——————

10.2) Passwords
Don’t use the same password you are using for the server on some other places.
When the Datacenter contacts you via e-mail or phone, always request
more informations. Remember, someone alse could contact you to get some
information or even root passwords.

10.3) Random thoughts
No matter what you need to secure the server, don’t think you are safe
only because you are not personally involved in any shits with
“hackers”. When you are hosting hacking/warez related sites you are the
target. There is no such thing as totally secured server. Most important
things are backups, make sure you will always have an “up-to-date”
offsite backups ^^

Anyhow, this is the end of my paper, I hope it will help you to get some
kind of security to your server.

-Krun!x

# milw0rm.com [2009-06-29]

Thanks,

Angky R

Install RHEL 3 U5 di server HP DL380 G5

IT, Linux 2 Comments

Wuuuiiih,
Akhirnya bisa juga nih install Si Topi Miring (eh Merah) Enterprise 3 Update 5 di server HP DL380 G5 setelah seminggu “ulukutek” (ngoprek+puciiing) gara2 si HP smart Array E200/128 Controller yang ngak kedetek sama kernelnya RLEL3 U5 (2.4.21-32).

Ternyata beda versi kernel jelas beda versi driver, dan jika kita cari di hp smart array itu ternyata cuma ada untuk RHEL3 U6 ke atas, nah kita kan meneketehe secara kita kan baru install RHEL versi license di server HP :D (maklum biasa yang free dan server abal-abal) jadi deh pusing minta ampun, mana ngak ada floppy drive yg nemplok di server lagi dan si HP cuma menyediakan file .dd yang harus di extract di floppy disk, untungnya dikantor ada floppy driver usb :D

Nah jadi kalo kita pake RHEL 3 U5, itu harus pake driver cpq_cciss-2.4.64-6.rhel3.i686.dd, sedangkan si HP kalo kita cari berdasarkan driver controller E200/128 itu dikasihnya yang cpq_cciss-2.4.64-7.rhel3.i686.dd.gz, jadinya error terus pas load drivernya.

Nah, berikut langkah yang dilakukan
1. download cpq_cciss-2.4.64-6.rhel3.i686.dd.gz (kalo link ini dah ilang, download aja di mirror ku :D )
2. extract file cpq_cciss-2.4.64-6.rhel3.i686.dd.gz
3. pake bantuan dosutil/rawwritewin.exe kita bikin disket image
- jalankan aplikasi rawritewin.exe, trus tunjuk filenya
4. atau kalo pake linux, pake commend dd
- dd if=cpq_cciss-2.4.64-6.rhel3.i686.dd of=/dev/flo bs=1400k (dimana kondisi device floppy ada di /dev/flo dan jangan dimounting)
5. setelah disket image dibuat, langsung aja masukin CD1 RHEL3 dan booting CDROM di server
6. Setelah masuk booting linux, nanti akan ditanya untuk boot option pas mau load kernel, jalankan command
- boot: linux dd (proses ini, biasanya ada time sekitar 5 detik, kalo di diemin itu akan langsung boot kernel untuk installasi tapi standard load kernel)
7. Setelah masuk proses installasi, baisanya akan ditanya untuk melakukan load driver via device nah ini kita harus pilih load driver agar driver yang sudah kita buat jadi disket image bisa di load oleh kernel, dan proses ini yg paling penting agar si HP smart Array bisa terdetek oleh kernel.
8. jika tidak ada error, berarti proses load driver sudah berhasil dan ikuti langkah selanjutnya untuk proses installasi.
9. Bersyukur deh sama Alloh :D

Ok sekian dulu, mudah-mudahan tulisan ni bermanfaat bagi kita semua.

Thanks to:
- Alloh swt
- My wife
- Cyrilla fedora kaffah (My daughter)
- Becks Grohl (si kupret ilham)
- Om Choiri (atas koreksinya, yg bener rawwritewin.exe :D )
- uncle Google
- HP
- RH
- All people in the world

Ref:
www.google.com
HP Smart Array E200/128 RHEL3

~Angky R~

When a “potential D.o.S.” means a one-shot remote kernel exploit: the SCTP story

IT 4 Comments
Common Vulnerabilities and Exposures
http://cve.mitre.org/cgi-bi/cvename.cgi?name=CVE-2009-0065

“Buffer overflow in net/sctp/sm_statefuns.c in the Stream Control Transmission Protocol (sctp) implementation in the Linux kernel before 2.6.28-git8 allows remote attackers to have an unknown impact via an FWD-TSN (aka FORWARD-TSN) chunk with a large stream ID. ”

Ubuntu Security Notice USN-751-1
http://www.ubuntu.com/usn/usn-751-1

“The SCTP stack did not correctly validate FORWARD-TSN packets. A remote attacker could send specially crafted SCTP traffic causing a system crash, leading to a denial of service. (CVE-2009-0065)”

RedHat Security Advisory
http://rhn.redhat.com/errata/RHSA-2009-0331.html

“a buffer overflow was found in the Linux kernel Partial Reliable Stream
Control Transmission Protocol (PR-SCTP) implementation.
This could, potentially, lead to a denial of service if a Forward-TSN chunk is received
with a large stream ID. (CVE-2009-0065, Important) ”

Potentially a DoS? Unknown Impact? Really? :D

I’m wondering why kernel developers (or vendors?) continue to claim that kernel memory corruption are just Denial of Service. Most of the times they _are_ exploitable.. yes, even when the vulnerability is remotely triggered, yes.. even when the corruption takes place in a freaking slub in the middle of a kernel _heap_ .. yes even when you have kernel data pages marked NX and the kernel .text read-only and yes, absolutely yes even when you start only with a 16bit displacement…

Last month one of my customer (that has a _custom_ deployed sctp application on his network ) asked me if the vulnerability may have some impact on his systems. The answer? “Yes it does”, and since someone thinks that is not exploitable and someone else speculates over a possible locally privilege escalation only (with remote host sending TSN packet) i decided to write a completely remote exploit.

It is extremely reliable (nearly one-shot always), given that you know the target kernel. I tested it on Ubuntu 8.04 and Ubuntu 8.10
server boxes running with different kernels (ubuntu kernel for amd64) and on OpenSuse11.1 and a Fedora Core 10 (yes, extra-brownie points here, it works great on Selinux too). …

I dont want to talk about the exploit, because the code should be self explanatory, but i’d like to briefly explore the vulnerability:

From an exploit writer point of view, the most critical points are: where the memory corruption occurs, when it occurs and what type of data structures are involved. The code that triggers the overflow is on sctp_ssn_skip() in the file: /net/sctp/structs.h:

void sctp_ssn_skip(struct sctp_stream *stream, __u16 id, __u16 ssn)
{
stream->ssn[id] = ssn+1;
}

Parameter “id” is not checked and later used as an index referenced by stream->ssn pointer: a 16bit value.
We can only overwrite memory _close_ the the struct involved.

Let’s take a look at the sctp_stream structure and its stream pointer..
sctp_ssnmap_new() and sctp_ssnmap_init() function are in /net/sctp/ssnmap.c

Structures involved in streams mapping are:

struct sctp_stream {
__u16 *ssn;
unsigned int len;
};


struct sctp_ssnmap {
struct sctp_stream in;
struct sctp_stream out;
int malloced;
};

The code that allocates them is the following:

#define MAX_KMALLOC_SIZE 131072 //0×20000

size = sctp_ssnmap_size(in, out);
if (size <= MAX_KMALLOC_SIZE) retval = kmalloc(size, gfp);

If the size is under the MAX_KMALLOC_SIZE threshold the function dynamically allocates the sctp_ssnmap struct using as a parameter the number of in and out streams.
That’s good news! Manipulating sctp handshake options we can arbitrary (if the sctp application has no application-level checks on, f.e., the number of simultaneously opened SCTP streams) decide the slab that will be used to allocate the chunk.

Immediately after that, the function calls sctp_ssnmap_init() to initialize in/out stream pointers:

static struct sctp_ssnmap *sctp_ssnmap_init(struct sctp_ssnmap *map, __u16 in, __u16 out)
{
memset(map, 0×00, sctp_ssnmap_size(in, out));

/* Start ‘in’ stream just after the map header. */
map->in.ssn = (__u16 *)&map[1]; <— stream in init
map->in.len = in;

/* Start ‘out’ stream just after ‘in’. */
map->out.ssn = &map->in.ssn[in]; <— stream out init
map->out.len = out;

return map;
}

Again, good news. The stream pointers are self-contained. They point inside the previously allocated buffer, and more precisely the input stream is located exactly after the header. No kfree() will ever be called on these pointers: in other words they are a safe place to overwrite, and there’s no need to worry about post-exploitation recovery.

The last thing that may complicate a bit the exploit is a check that the kernel makes before invoking sctp_ssn_skip():

/net/sctp/ulpqueue.c: sctp_ulpk_skip() :

if (SSN_lt(ssn, sctp_ssn_peek(in, sid))) <— check
return;

/* Mark that we are no longer expecting this SSN or lower. */
sctp_ssn_skip(in, sid, ssn);

with SSN_lt():

enum {
SSN_SIGN_BIT = (1<<15)>

Strictly speaking this code checks if the value we are overwriting (the old SSN content) is greater or equal to the new value: if so it doesn’t process the FWD chunk. The comparison here is made using Serial Number Arithmetic (like the one used for protocol sequence number (eg. tcp seq number)) and can be fooled writing multiple chunks until it legally wraps around to a well known defined value.

Then, at this point, if we know the target running kernel, we can:

1) Control the slab/slub to be used
2) Overwrite a safe pointer close to the overflowing buffer
3) Easily control overwritten data..

.. in other words..
..
#./sctp_houdini -H 192.168.200.1 -P 5555 -h 192.168.200.10 -p 20000 -s 15000 -c 700 -t fedora64_10-2.6.25-117
[**] Monitoring Network for TSN/VTAG pairs..
[**] Start flushing slub cache…
[**] Using TSN/VTAG pairs: (TSN: 28022e8 <=> VTAG: 41fdd4fb) / (TSN: 8cafd3ae <=> VTAG: 1a99396c)…
[**] Overwriting neightboard sctp map..
[**] Disabling Selinux Enforcing Mode..
[**] Overwriting neightboard sctp map ……
[**] Overwriting vsyscall shadow map..
[**] Hijacking vsyscall shadow map..
[**] Waiting daemons executing gettimeofday().. this can take up to one minute…
[**] ….
[**] Connected!
[**] Restoring vsys: Emulate gettimeofday()…
uid=0(root) gid=0(root) groups=51(smmsp) context=system_u:system_r:sendmail_t:s0

GAME OVER

The exploit code can be downloaded here.

Ref:
- milis tetangga
- http://kernelbof.blogspot.com/

Thanks,
~ Angky. R ~

« Previous Entries