Friday, October 24, 2008

resolving server issues

kemaren, server prod. di scan vulnerabilities-nya. dapet 14. sayangnya cuma 11 diantaranya yang bisa di-resolve.

1. SSH Protocol Version 1 Supported
Dengan openssh, tinggal edit sshd_config supaya menghilangkan support versi 1 dengan mencantumkan hanya:
Protocol 2

Cara verifikasi:
# ssh -v -1 localhost


2. PHP PHPInfo Cross-Site Scripting Vulnerability
Disable fungsi phpinfo() dengan memasukkan baris berikut di php.ini:
disabled_functions = phpinfo

Cara verifikasi:
# telnet localhost 80
GET /info/phpinfo.php HTTP/1.1
Host: anything.com
Connection: Keep-Alive


3. "test-cgi" CGI Vulnerability
Karena ngga' butuh CGI lagi, hilangkan sekalian map ke /cgi-bin/ di apache httpd.conf
Cara Verifikasi:
# telnet localhost 80
GET /cgi-bin/test-cgi
Host: anything.com
Connection: Keep-Alive


4. Apache HTTP Server 413 Error HTTP Request Method Cross-Site Scripting Weakness
Solusi termudahnya adalah mengubah default error message untuk 413 di apache httpd.conf
ErrorDocument 413 "<h1>413 Error HTTP Request Method Cross-Site Scripting Weakness</h1>"

Cara verifikasi:
# telnet localhost 80
<script>alert(document.domain)</script> / HTTP/1.1
Host: anything.com
Connection: close
Content-length: -1


5. Hidden RPC Services
Buat semua RPC services nonaktif (got the list idea from here). Untungnya ngga' ada service NFS yang dipake jadi portmap, nfs, nfslock, rpcidmapd, rpc* bisa di nonaktifkan pake chkconfig
/sbin/chkconfig portmap off
/sbin/chkconfig nfs off
/sbin/chkconfig nfslock off
/sbin/chkconfig rpcidmpd off

Cara verifikasi:
# netstat -an | grep ":111"
# netstat -an | grep ":1024"


6. Web Directories Listable Vulnerability

7. Web Server HTTP Trace/Track Method Support Cross-Site Tracing Vulnerability
Untuk apache dengan banyak vhosts, solusinya dengan mod_rewrite dan harus rajin nambah satu-satu di masing2 vhost configuration (read more here):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>

Cara Verifikasi:
# telnet localhost 80
TRACE / HTTP/1.1
Host: anything.com
Via: tulis apapun di sini akan di ulang di body


8. printenv Script

9. ICMP Timestamp Request
Nah ini agak masuk ke firewall. Tambah aja kurang lebih seperti ini:
/sbin/iptables -A RH-Firewall-1-INPUT -p icmp --icmp-type timestamp-request -j REJECT --reject-with icmp-host-prohibited
/sbin/iptables -A RH-Firewall-1-INPUT -p icmp --icmp-type timestamp-reply -j REJECT --reject-with icmp-host-prohibited
/sbin/iptables -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT


10. expose_php Set On in php.ini
Tinggal ubah php.ini jadi
expose_php = Off

Cara Verifikasi:
# telnet localhost 80
GET /?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 HTTP/1.1
Host: anything.com
Connection: Keep-Alive


11.Apache Web Server ETag Header Information Disclosure Weakness
Tambah httpd.conf dengan
FileETag None, atau
FileETag MTime Size

Cara Verifikasi:
# telnet localhost 80
HEAD / HTTP/1.1
Host: anything.com
Connection: Keep-Alive

Tuesday, October 21, 2008

(g)mail tips

setelah membaca artikel karl hodge, ada 3 hal lama yang kembali teringat tentang menggunakan mail server application.


...

35. Want to track where that spam list got your address from? Use this little known Gmail trick. Insert a + symbol in your email address and Gmail will ignore everything between the + and @ symbols. For example - if your Gmail address is yourname@Gmail.com you could tell Amazon that it's yourname+amazon@Gmail.com. The mail will still be routed to you...

36. You can still use filters to capture mails sent to addresses containing the + symbol, enabling you to give different addresses to each of the online services you use, then filter them accordingly. For example, add a receipt label to all mail from PayPal.

37. Gmail ignores periods in email addresses too. So, if you signed up as bob.spod@Gmail.com - you can send mail to bobspod@Gmail.com or even b.o.b.s.p.o.d.g.o.d@Gmail.com and it will still go to the same address.

...


seperti dejavu, saya sudah pernah membaca poin 35 dan 36 (kemungkinan dengan sintaks berbeda). kemungkinan MTA lain sudah pernah implement fitur seperti ini. yang saya garis bawahi sebetulnya bukan siapa duluan yang sudah membuat fitur ini, tapi kenapa saya tidak pernah mempraktekkan hal ini untuk mengorganisir mailbox dan terutama untuk mengenali sumber yang membocorkan alamat email saya ke spammer.

mengenai tips 37, saya jadi penasaran untuk mencari tahu apakah hotmail juga menerapkan hal yang sama, sehingga mailbox saya yang beralamat di agastiyasm bisa dibaca sebagai agastiya.sm, or agastiya.s.m.

that would be cool.

Tuesday, October 07, 2008

xml comparation

membandingkan dua xml menggunakan alat seperti diff tidak mudah. diff hanya peka terhadap perbedaan baris per baris dalam sebuah file. diff tidak punya pengetahuan tentang struktur xml. sehingga, walaupun xml secara konten sama persis, namun whitespaces dan formatting yang berbeda akan menyebabkan diff tertipu. oleh karena itu, format xml perlu dinormalisasikan terlebih dahulu ke dalam satu bentuk yang sama; misalnya setiap tag akan menempati satu baris.

setelah mencoba beberapa kali, command yang dapat menghasilkan bentuk normalisasi yang dapat dibandingkan adalah
# xmllint --c14n [source] | xmllint --format -o [result] -
file output dari command di atas dapat di compare dengan diff
# diff [result1] [result2]
ataupun vim sbb
# vim -d [result1] [result2]

how?
pemanggilan xmllint yang pertama dengan menggunakan --c14n adalah untuk memformat xml dalam bentuk canonical-nya (baca lebih lanjut tentang bentuk canonical dari xml di 2 artikel wikipedia atau ibm). dengan menggunakan xmllint, xml yang dihasilkan sudah sesuai harapan, walaupun jika dibaca oleh human, xml structure tidak kelihatan karena whitespace tidak dihilangkan.

sayangnya, dari percobaan yang saya lakukan, document yang sudah dalam bentuk canonical +beautified (ada whitespace untuk memperjelas xml structure) tidak akan terpengaruh dengan command --c14n ini. solusinya adalah membuat bentuk akhir menjadi canonical +beautified dengan tambahan processing lewat parameter --format.