[Security] Serangan pada bug ShellShock melalui PHP-CGI

Sebelum lebih jelas bercerita tentang serangan shellshock ini, ada baiknya juga membaca cerita ini:

http://en.wikipedia.org/wiki/Shellshock_(software_bug)
http://www.troyhunt.com/2014/09/everything-you-need-to-know-about.html
https://shellshocker.net/

Shellshock ini bug yang dirilis kisah vulnerability-nya pada sekitar akhir 2014. Shellshock ini menyerang beberapa service network yang memiliki kemampuan execute command dari sisi client, dengan otentifikasi lemah. Shellshock ini merupakan bug keluarga dari bash bug. Shellshock paling deras menyanyerang webserver Apache yang menjalankan PHP-CGI. Sementara PHP-CGI banyak digunakan oleh layanan hosting untuk melayani multiversi PHP permintaan para client. Perhatikan pada attachment berikut:

Continue reading “[Security] Serangan pada bug ShellShock melalui PHP-CGI”

Mainan For di bash Linux

Terimakasih yang mau menunggu lama artikel singkat ini, maaf requestnya baru kejawab :D . Antri. Seorang rekan bertanya : “Bagaimana bisa otomatis membuat direktori yang sama dengan isi tabel user di sebuah tabel user mysql? Syaratnya perintahnya singkat”. Ilustrasinya adalah sebagai berikut. Terdapat sebuah tabel user pada database pegawai, dengan isi sebagai berikut:

Id username
1 bimo
2 wahyu
3 sukar

Dari sejumlah nama itu akan dibuat sebuah direktori yang berisi subdirektori yang memiliki nama seperti pada tabel tersebut.
Mula-mula kita perlu tahu perintah bash shell mysql untuk menampilkan tabel. Kita tahu bahwa syntax mysql untuk menampilkan isi tabel user pada database pegawai adalah
Continue reading “Mainan For di bash Linux”

Menggunakan Perintah find, xargs, sed dan grep Untuk Efektifitas Find and Replace

Salah satu perintah dasar UNIX yang digunakan juga di Linux, adalah sed. Fungsi sed, sangat membantu dalam proses operasional server Linux. Perintah ini bersama dengan grep, tail, xargs dan lain sebagainya, adalah perintah-perintah dasar yang persamaan fungsinya tidak dapat ditemui di sistem operasi Windows, kecuali install dari luar. Sed, paling sering saya lakukan saat saya perlu melakukan pencarian file yang memiliki karakter tertentu. Saya gunakan juga sed untuk sekaligus melakukan pengubahan pada text tersebut (Find Replace).
Continue reading “Menggunakan Perintah find, xargs, sed dan grep Untuk Efektifitas Find and Replace”

7 Fitur Command/Perintah Internal Linux yang Tidak Ada Persamaannya di Windows/DOS

Linux, secara dasar, memiliki keunggulan dalam mengolah string dan file dibanding dengan sistem operasi Windows. Beberapa command / perintah dasar linux, ternyata tidak dapat disaingi oleh windows, selain dengan installasi program external windows lagi. Beberapa command atau perintah dasar itu adalah :

 

grep

grep adalah suatu perintah yang digunakan untuk melakukan penyaringan suatu keluaran dari perintah lain berdasarkan kata/karakter. Contoh penggunaannya adalah , misal saya ingin mencari direktori yang mengandung kata foto dalam direktori /home/bimo/ pada komputer saya. Maka saya lakukan seperti ini:

hasilnya adalah :

 

Artinya bahwa dengan fasilitas pipa dengan tanda | yang artinya adalah dilanjutkan dengan perintah berikutnya, maka hasil dari ls -al /home/bimo akan dilanjutkan dengan persyaratan “yang memiliki kata foto”

 

Berarti dengan demikian grep dapat diintegrasikan dengan perintah lain seperti locate, cat, dan lain-lain yang menghasilkan keluaran

 

tail

Perintah tail ini berfungsi untuk menampilkan suatu file sejumlah 10 baris terakhir. Perintah tail ini dapat dilanjut dengan opsi tertentu seperti -n, -f dan lain-lainnya. Tail -n dapat digunakan untuk menentukan berapa baris terakhir yang akan ditampilkan. Misal:

Berarti kita akan menampilkan 1000 baris terakhir dari /var/log/messages. Tail -f lebih usefull lagi, yaitu untuk keperluan menampilkan secara realtime dari baris akhir sebuah file. Misal kita akan tampilkan /var/log/messages secara terus menerus, kita tinggal mengetik :

 

 

Untuk keluar dapat digunakan tombol q

 

Untuk linux jenis baru telah dibentuk juga tailf yang artinya tail -f. Tail dapat juga diperlakukan seperti demikian :

yang artinya keluaran dari sebuah perintah, akan difilter sebanyak 10 yang terakhir. Tail begitu sangat berguna terutama untuk membuka file-file log webserver atau sejenisnya yang selalu berjalan. Windows/DOS  akan memiliki kesulitan dalam memmbuka file-file besar berjalan seperti ini. Dan ketika terbuka pun, Windows tidak akan menampilkan pesan terakhir yang muncul. Untuk itu dapat anda cari juga program tail for windows http://tailforwin32.sourceforge.net/

 

 

more

More ini berfungsi untuk menampilkan file text perhalaman yang digabung dengan perintah yang lain misalnya adalah cat. Jika sebuah file text yang berukuran besar, seperti /var/log/messages dengan lebih dari 200 baris, maka dengan more dapat ditampilkan perhalaman. Dengan menekan spasi maka muncul perhalaman ke bawah. Contoh penggunaannya adalah :

sama dengan

 

Untuk keluar sebelum file berakhir dapat digunakan tombol q

 

less

Less ini sama dengan more, hanya saja less dapat diperlakukan naik turun halaman dengan menggunakan tombol U (up) dan D (down). Misal

Untuk keluar dapat digunakan tombol q

 

last

Perintah last digunakan untuk mengetahui siapa yang terakhir login. Hal ini memang tidak bisa dicari persamaannya di windows.

 

top

Perintah top digunakan untuk mengetahui task yang paling besar menggunakan memori. Untuk keluar dari perintah ini dapat menggunakan tombol Q.

 

whoami dan who

who adalah perintah untuk mengetahui siapa saja yang sedang login di komputer tersebut. Biasanya perintah ini disingkat dengan w. Sedangkan whoami adalah perintah untuk mengetahui saat ini kita login sebagai apa.

Sebenarnya masih sangat banyak perintah dasar linux yang fiturnya tidak tertiru di Windows. Namun disini dijelaskan tujuh saja yang paling sering digunakan. Sedangkan beberapa perintah memang banyak yang memiliki kegunaan sama misal :

cat (Linux) vs type (Windows)
ls (Linux) vs dir (Windows)

dan lain sebagainya.

Semoga artikel ini bermanfaat

[Tips Trick] Bisakah Aplikasi Web Menjalankan File yang Dimiliki root Linux?

Linux, dirancang sebagai sistem operasi yang aman. Keamanan Linux didukung dengan beberapa fitur dasarnya antara lain ketatnya pengaturan akses, ijin / permission dan kepemilikan / owner. User pemilik hak tertinggi adalah super-user yaitu root. User root memang dirancang untuk bertugas terhadap administrasi-admistrasi dan pengaturan-pengaturan dasar bagi lancarnya sistem. Sebuah pengaturan yang ketat biasanya akan berpengaruh terhadap operasional file di tingkat user biasa. Sedangkan biasanya kenyamanan penggunaan akan mengakibatkan celah keamanan. Sehingga dengan demikian seorang sistem administrator harus bijak dalam mengeluarkan keputusan pengaturan sistem.

Dalam sebuah sistem server, layanan web akan dilayani oleh web server. Pada umumnya dalam linux ditangani oleh Apache, LightHTTPD, atau juga Nginx ( n-gin-x / baca engine-x). Seluruh webserver ini akan dihidupkan oleh sistem atau oleh root. Namun demikian webserver ini akan berjalan dengan mode bukan root. Biasanya untuk Linux keturunan RedHat, webserver akan berjalan sesuai namanya yaitu sebagai user apache, atau user nginx atau kadang diset juga sebagai user nobody. Sedangkan berbasis Debian, seperti ubuntu, mint, akan berjalan dengan nama www-data. Dengan demikian, seluruh file yang akan dipublish ke web harus memiliki properti ijin yang boleh diakses oleh user webserver tersebut. Jika saya menggunakan ubuntu, maka biasanya dalam DocumentRoot sistem komputer saya akan memiliki hak akses seperti berikut :

 

Dalam contoh diatas, terdapat beberapa notasi atau urutan properti dari sebuah direktori/folder atau file. Tentang hal ini akan dibahas di lain posting.

Sebuah file yang dimiliki oleh root, jika user lain tidak diberi akses baik eksekusi, baca maupun modifikasi, maka user sistem tersebut akan gagal melakukan pembacaan file. Begitu juga dengan user apache/web. Ketika user web gagal, maka file tersebut tidak akan tampil di browser karena apache gagal melakukan pembacaan user. Dengan demikian sangat disarankan kepemilikan web adalah milik webserver user.

 

Mengapa webserver tidak boleh berjalan sebagai root?

Dengan alasan keamanan, webserver memang tidak boleh berjalan sebagai root. Sebuah aplikasi web dinamis kadang tanpa disadari, mengandung bug atau kesalahan pemrograman yang berbahaya. Sehingga ketika sebuah intrusi hacker masuk ke dalam web, hacker tersebut dapat melakukan apa saja setingkat dengan root. Hal ini sangat berbahaya. Misalkan adalah jika terdapat script yang mengijinkan user melakukan upload file, dan ternyata file tersebut adalah suatu tools yang memungkinkan adanya operasional sistem, maka jika user web adalah root, sangat mungkin sang hacker dapat membuat operasional penuh terhadap sistem, seperti menghapus seluruhnya, mematikan komputer, mengganti konfigurasi.

 

Dapatkah webserver dipaksa untuk berjalan sebagai root?

Secara teknis bisa saja. Namun sangat beresiko. Proses penggantian user yang akan dijalankan oleh webserver ada dalam konfigurasi webserver. Untuk apache terdapat pada apache.conf (debian) atau httpd.conf, untuk Redhat, Slackware, CentOS dll, yaitu pada bagian ini :

namun sekali lagi tidak disarankan untuk mengganti menjadi user pelaku administrasi, terutama root.

 

Apakah berarti aplikasi web tidak dapat menjalankan pekerjaan-pekerjaan sistem?

Dalam kenyataannya, aplikasi web sering harus menjalankan : SMS Gateway, Menghidupkan dan mematikan webserver secara webbase, dan lain sebagainya. Kadang juga harus melakukan penggantian password user untuk satu alasan. Dapatkah? Ya, dapat. Yaitu dengan menyiasati dengan memanfaatkan file konfigurasi root /etc/sudoers/. Sudo adalah sebuah perintah yang artinya superuser do, atau dikerjakan dengan mode superuser. User yang dapat melakukan sudo adalah user yang terdaftar dalam /etc/sudoers ini. Dengan beberapa configuration maka sudoers dapat juga dilakukan tanpa password atau dengan password. Kira-kira isi sudoers adalah seperti berikut:

 

 

BERDEAL ANTARA APLIKASI DENGAN SUDOERS

Misal saya memerlukan akses root untuk menghidupkan sebuah server sms gateway. Sedangkan server tersebut akan dihidupkan dengan mode root dengan perintah :

Maka saya akan membuat script bernama sms.php yang kira-kira sebagai berikut:

 

 

Dengan perkiraan operasional adalah jika saya akan menghidupkan server sms adalah

 

 

Script itu hampir akan susah dijalankan oleh webserver. Maka saya akan mengganti script tersebut sebagai berikut :

  1. Membuat sebuah script shell yang berfungsi menghidupkan sms
  2. Membuat permission executable terhadap shell dan dapat diakses dan dieksekusi oleh webserver
  3. Mengganti konfigurasi sudoers
  4. Membuat script php yang akan menjalankan bash shell administrator sms.

 

SCRIPT SHELL

 

PERMISSION

 

KONFIGURASI SUDOERS

 

 

 

SCRIPT PHP

 

 

 

Dengan trik seperti ini, maka kita tetap dapat membuat aplikasi web yang bertujuan untuk melakukan operasional / administrasi yang dapat dilakukan oleh root secara terbatas dan ketat. Yaitu dengan membuat apache/webserver memiliki hak akses setara root untuk menghidupkan sms melalui file /opt/smsstart.sh Namun, untuk hal ini tetap membutuhkan kehati-hatian dalam berprogramming.

Sekian, sekedar tulisan dan sekedar berbagi, semoga bermanfaat.