How to secure your Web Server from PHP Vulnerable Attack and SQL Injection

Hampir seminggu lebih aku try and error dan belajar untuk setup software untuk protect server sistem PHP dan database aku dari sebarang cubaan dari luar untuk hack menggunakan vulnerable pada PHP dan juga vulnerable SQL Injection.

So aku ada jumpe 2 software berkaitan dan ianya hanya boleh digunakan pada server Linux sahaja :
Test Bed aku :
OS : Red Hat 5.3 dan CentOS 5.2
PHP : 5.2.11
Suhosin :
Suhosin adalah sistem kawalan untuk instalasi PHP. Ianya dicipta untuk meleindungi server dan pengguna daripada kelemahan diketahui atau tak diketahui pada aplikasi PHP dan PHP Core. Suhosin ada dua jenis iaitu yang pertama adalam patch kepada PHP core yang akan membuat kawalan peringkat bawah dan melindungi daripada bufferoverflows atau format string vulnerable. Manakala yang kedua pula adalah PHP Extensions yang akan melaksanakan semua jenis perlindungan.



Langkah untuk install Suhosin jenis kedua iaitu semua jenis perlindungan :

1) Import dahulu key bagi pengesahan suhosin yang akan digunakan

#> gpg --import < hardened-php-signature-key.asc
Paparan berikut akan dilihat :
gpg: /root/.gnupg/trustdb.gpg: trust-db erzeugt
gpg: key 0A864AA1: public key "Hardened-PHP Signature Key" imported
gpg: Anzahl insgesamt bearbeiteter Schl├╝ssel: 1
gpg:                              importiert: 1
 
2) Muat turun extension Suhosin dahulu di website ni.
cd /opt
wget http://download.suhosin.org/suhosin-0.9.29.tgz 
 
3) Kemudian taip berikut untuk semak kesahihan file didownload :
#> md5sum php-5.1.4.tar.bz2
66a806161d4a2d3b5153ebe4cd0f2e1c  php-5.1.4.tar.bz2

4) #> gunzip suhosin-0.9.29.tgz

5) #> tar -xf suhosin-0.9.29.tar

6) #> cd suhosin-0.9.29

7) #> phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519

(Sekiranya anda tak dapat result seperti di atas, linux anda tiada php-devel package. Cuba run :
#> yum -y install php-devel)


8) #> ./configure

checking for egrep... grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... no
checking for gcc... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
(Jika keluar result begini maknanya linux anda tiada gcc installed. Biasa la default biasanya tkde dalam tu sebab kita tak guna selalu. so run command berikut : #> yum install gcc)
Kalau repo anda tak jumpa. Cuba ikut langkah nk update repo di artikel aku ni. Kebiasannya default centos atau RHEL dah ada dalam repo mereka.

Sepatutnya akan keluar result berikut :
Sebahagian result di hujung...
**********************************
checking if cc supports -c -o file.o... yes
checking whether the cc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
configure: creating libtool
appending configuration tag "CXX" to libtool
appending configuration tag "F77" to libtool
configure: creating ./config.status
config.status: creating config.h
**********************************

9) #> make
Bahagian hujung result :
**********************************
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.
**********************************

10) #> make install
Resultnya  :
Installing shared extensions:     /usr/lib/php/modules/

11) #> cd /etc/php.d/

12) #> cp mysql.ini suhosin.ini

13) #> nano suhosin.ini
Delete all words in that file and replace with this :
extension=suhosin.so
******************************
ctrl+x , y

14) #> /etc/init.d/httpd restart

15) #> taip php -v
PHP 5.2.11 (cli) (built: Sep 21 2009 14:49:09)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with Suhosin v0.9.29, Copyright (c) 2007, by SektionEins GmbH

16) Tahniah! anda berjaya install Suhosin untuk menyelamatkan PHP Core anda. Cara untuk guna suhosin patch aku tak terangkan sebab aku rasa elok guna suhosin extension sebab ianya full protection pada PHP Core.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Sekarang aku nak terang cara nak install  greensql firewall pulak. yeah!
Test Bed aku :
OS : Red Hat 5.3 dan CentOS 5.2
PHP : 5.2.11

MySQL : 5.0.86
GreenSQL FW :
GreenSQL adalah perisian firewall untuk database. Ianya mampu melindungi daripada serangan SQL injections. GreenSQL berfungsi sebagai proxy dan menyokong MySQL. Ianya menggunakan kaedah penetapan markah berdasarkan command admin yang biasa digunakan (DROP, CREATE, etc).


1) #> cd /opt

2) Download file mengikut distro Linux anda. Boleh cari file RPM mengikut distro dan versi terkini di website berikut : http://www.greensql.net/download

(untuk versi RHEL 5)
http://www.greensql.net/download/get?os=RHEL_5&platform=i386&filename=greensql-fw-1.2.1-12.1.i386.rpm
(untuk versi CentOS 5)
http://www.greensql.net/download/get?os=CentOS_5&platform=i386&filename=greensql-fw-1.2.1-12.1.i386.rpm

(* download dan transfer semula ke server folder /opt guna winscp. Puas aku cari link yang direct ke file rpm tapi tak jumpa. Guna wget tak dapat file rpm sebenar)

3)  #> rpm -ihv greensql-fw-X.X.X.rpm
 *********************************************

warning: greensql-fw-1.2.1-12.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1674ae8b
Preparing...                ########################################### [100%]
   1:greensql-fw            ########################################### [100%]

run /usr/sbin/greensql-config for setting up configuration
 

**********************************************



4)#> /usr/sbin/greensql-config



***************************************************************
executing /usr/bin/greensql-create-db.sh
which: no psql in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

mysql binary file located: /usr/bin/mysql
mysqladmin binary file located: /usr/bin/mysqladmin

Database type (mysql or pgsql) [mysql]: [ENTER]
MySQL server address [127.0.0.1]:
[ENTER]
MySQL port number [3306]: [ENTER]
MySQL admin user [root]: [ENTER]
MySQL admin password [pwd]: [PASSWORD MYSQL ROOT]
GreenSQL config db name [greendb]: [ENTER]
GreenSQL DB user name [green]: [ENTER]
GreenSQL DB user password [pwd]: [PASSWORD CADANGAN USER GREEN, DEFAULT PWD]
Would you like to set up the database and tables automatically [Y/n]: y
y
Creating MySQL database...
Adding MySQL user green...
Creating MySQL tables...
Modifing /etc/greensql/greensql.conf...
***************************************************************


5) #> /etc/init.d/greensql-fw start

6) #> cd /var/www/html


7)#> ln -s /usr/share/greensql-fw/ greensql

8)#> cd /var/www/html/greensql


9)#> chmod 0777 templates_c 
(sekarang anda boleh layari di http://yourdomain/greensql)

gunakan user : admin dan password : pwd



10) Kemudian anda perlu buat pengujian sama ada port 3305 boleh digunakan untuk proxy mysql.
mysql -h 127.0.0.1 -P 3305 -u root -p
password :
******************************************************

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6332
Server version: 5.0.86 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


******************************************************

11) Di dalam konfigurasi sambungan database di dalam coding PHP anda kena ubah daripada 

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');  

KEPADA


$link = mysql_connect('127.0.0.1:3305', 'mysql_user', 'mysql_password');

12) Anda selesai setup greensql dan melindungi server anda dari sql injection serta boleh memantaunya. Cuma greensql tak capture ip penyerang tersebut. Yang ini kelemahan yang ada. Namun perisian ni amat membantu...


Semoga nota ini membantu anda semua..
 
~ Be a Creator Not a User ~
http://muzzotechspot.blogspot.com
http://muzzoshah.blogspot.com

Ulasan