Bagaimana saya bisa memblokir upaya peretasan yang menargetkan phpMyAdmin?

35

Situs web saya mendapat ribuan klik setiap hari dari berbagai IP yang mencoba mengakses:

/php-myadmin/
/myadmin/
/mysql/

... dan ribuan variasi lainnya. Tidak ada direktori ini yang ada, saya bahkan tidak punya phpmyadmin di server saya.

Saya tidak berpikir salah satu dari upaya ini telah berhasil, namun mereka harus mengambil tol mereka pada sumber daya server dan membuang-buang bandwidth, jadi saya ingin menghentikannya jika memungkinkan. Saya telah memblokir beberapa IP ini tetapi mereka tetap kembali dengan IP baru, apakah ada cara saya bisa mencegah ini lebih permanen?

amba88
sumber
8
Ribuan hit per hari bukanlah apa-apa. Apakah Anda benar-benar mengalami kesulitan kinerja atau hanya berasumsi? Beberapa ribu 404 dalam sehari benar-benar tidak ada artinya .
MDMarra
Tidak, saya tidak mengalami masalah kinerja. Tapi itu mengganggu saya dan saya bertanya-tanya apakah ada yang bisa saya lakukan.
amba88
6
Berhati-hatilah dengan pemblokiran berbasis IP - banyak IP yang berakhir disikluskan ke pengguna yang sah. Juga, beberapa pengguna yang sah dapat terinfeksi sebagai bagian dari botnet. Jika Anda melakukan pemblokiran berbasis IP, harap pastikan pemblokirannya singkat.
Bob
Tidak disebutkan mod_securitydi utas ini, jadi periksa itu . Catatan komentar di bawah ini mencatat bahwa ini sebenarnya akan menyebabkan lebih banyak pekerjaan yang harus dilakukan oleh server tentunya. Jadi mungkin mod_evasivejuga akan baik untuk diimplementasikan . fail2ban, tapi itu tercantum di bawah ini.
mbrownnyc

Jawaban:

42

Jangan khawatir tentang itu. Melayani 404 adalah pekerjaan kecil yang harus dilakukan server web. Anda mungkin dapat melayani sepuluh 404 per detik menggunakan 486. Bandwidth per 404 diabaikan; permintaan GET kecil dan respons 404 kecil.

Serius; jangan khawatir tentang itu. Ini hanya bagian tak terpisahkan dari menjalankan server di internet.

Mark Henderson
sumber
14
Hell-Banning: Sajikan halaman normal (200 OK) dengan output omong kosong. Alat-alat yang digunakan anak-anak akan melaporkan halaman yang ditemukan dan mereka harus menyelidiki dengan tangan (halaman login palsu pasti akan menjadi perangkat setan) :)
arul
4
@arul - Beberapa penyerang mungkin menganggap ini sebagai tantangan dan memberi perhatian ekstra pada server Anda karena dendam. Apakah melayani 404 yang lebih kecil atau berbeda sama sekali berguna di sini? Misalnya, jika host biasanya menyajikan 404 dengan tautan dukungan, haruskah / bukankah ia dapat melayani 404 polos tanpa konten ke url yang ditargetkan ini?
Freiheit
1
Tujuannya adalah membuat musuh menghabiskan sumber daya tambahan (waktu) untuk menganalisis hasilnya. Jika Anda mendapatkan 404, Anda tahu bahwa tidak ada kemungkinan serangan itu berhasil. Variabel-panjang hasil OK [tanpa penyelidikan lebih lanjut] tidak dapat dibedakan dari hasil yang diharapkan. Mereka menjalankan pemindaian ini karena kesabaran bukanlah kebajikan mereka, sehingga menurunkan motivasi mereka dan mereka akan berhenti :)
arul
1
Untuk poin bonus, kembalikan halaman statis yang persis seperti halaman phpmyadmin asli, tetapi sepenuhnya tidak berfungsi.
captncraig
1
Untuk poin bonus tambahan, buat penundaan 0,5 - 1 detik. Ini tidak akan secara signifikan meningkatkan waktu untuk memuat oleh pengguna yang sah tetapi akan memperlambat pemindaian yang dilakukan orang jahat. (Anda hanya perlu memastikan bahwa server Anda memiliki kapasitas untuk menahan koneksi terbuka lebih lama dari yang diperlukan dan masih memproses permintaan yang sah.)
Moshe Katz
38

Sayangnya untuk Anda, inilah cara kerja Internet. Abaikan saja. Ribuan bot / trojan memindai Internet. Sumber IP akan selalu acak. Tidak ada obatnya.

Satu-satunya solusi 100% untuk menghilangkan lalu lintas diilustrasikan di bawah ini: masukkan deskripsi gambar di sini

Alternatifnya adalah:
- untuk pindah dengan https / http dari port 80/443 ke sesuatu yang lain. Bot biasanya tidak mencari server http pada semua port 65k lainnya.
- gunakan VPN untuk terhubung ke server (saya kira ini tidak mungkin jika Anda meng-host situs web publik).

Bartłomiej Zarzecki
sumber
LOL +1 untuk diagram :-) Saya punya masalah yang mengganggu ini (seperti halnya kita semua) di situs statis dan ini adalah jawaban yang paling berguna.
Dave Everitt
30

Apa yang Anda inginkan adalah Fail2ban (dengan asumsi ini adalah mesin linux, Anda tidak mengatakan ...)

Apa itu Fail2ban?

Fail2ban akan mem-parsing log sistem, mencari ekspresi reguler tertentu yang akan diblokir. Ketika menemukan kecocokan (atau beberapa kecocokan dari IP yang sama, tergantung pada bagaimana Anda mengkonfigurasinya), itu akan memblokir, biasanya melalui IPTable. Biasanya ini digunakan untuk memblokir upaya otentikasi yang gagal terhadap SSH atau server web.

Anda mengonfigurasinya untuk mencekal mereka untuk jumlah waktu tertentu (bisa beberapa menit, bisa berhari-hari ... tergantung pada seberapa gigihnya mereka), setelah itu pelarangan akan kedaluwarsa, kecuali jika mereka mencoba lagi.

Bagaimana cara ini membantu memblokir bot pemindaian phpmyadmin?

Itu bisa dengan mudah digunakan untuk mencocokkan tanda-tanda umum serangan, seperti mencoba mengakses folder phpmyadmin yang tidak ada. Anda harus mengetahui ekspresi reguler yang benar untuk mencocokkan upaya tersebut, dan memastikan Anda tidak memblokir pengguna yang sah.

Konfigurasi yang diberikan dalam posting blog ini dapat berfungsi secara verbatium atau memerlukan penyesuaian untuk pengaturan Anda.

Mengapa saya harus memblokirnya? Kesalahan 404 tidak membutuhkan biaya banyak

Memblokir mereka di iptables TIDAK memiliki kegunaan - kemungkinannya adalah jika mereka memeriksa kerentanan phpmyadmin, mereka dapat mencoba layanan lain untuk kerentanan juga, sampai mereka menemukan sesuatu yang berfungsi. Melarang mereka akan membuat sebagian besar bot / skrip menyerah setelah beberapa saat, dan mereka akan beralih ke target yang lebih baik.

Bahkan melalui pemindaian tidak membutuhkan biaya banyak (kecuali mereka benar-benar menemukan kerentanan), mereka membanjiri log Anda sehingga lebih sulit untuk melihat serangan yang berhasil dan masalah dengan server web Anda.

Seperti komentar di bawah ini katakan, Fail2ban memang membutuhkan beberapa sumber daya sistem. Tetapi tidak banyak. Paling tidak saya bisa mengatakan saya tidak pernah memiliki masalah kinerja yang saya dapat atribut ke Fail2ban. Namun saya memiliki masalah kinerja dari skrip yang sangat agresif yang mencoba brute force passwords atau melemparkan ribuan upaya injeksi SQL dan eksploitasi lainnya per detik di server saya. Memblokir mereka di tingkat firewall membutuhkan sumber daya JAUH lebih sedikit daripada memblokir mereka di tingkat server / aplikasi. Itu juga dapat diperluas untuk menjalankan skrip khusus untuk melarang alamat IP - jadi alih-alih melarangnya di IPtables, Anda mungkin dapat membuatnya mencekal mereka di firewall perangkat keras, atau mengirim email kepada seseorang jika orang yang sama terus berusaha menyerang Anda sehingga Anda dapat mengeluh ke ISP mereka atau minta pusat data Anda memblokirnya di firewall mereka.

Ada tips lain?

SANGAT DIANJURKAN bahwa Anda memasukkan daftar putih beberapa alamat IP yang Anda kontrol sehingga Anda tidak sengaja mengunci diri.

Hibah
sumber
6
itu akan menjadi pemborosan sumber daya :) Saya pikir Anda akan menggunakan lebih banyak siklus CPU pada Fail2ban daripada hanya melayani kadang-kadang 404 :)
Bartłomiej Zarzecki
4
@ BartłomiejZarzecki Keamanan yang lebih baik selalu membutuhkan lebih banyak sumber daya
user11153
3
@ heinrich5991 akan diblokir setelah upaya pertama . Tidak membuat perbedaan untuk beberapa pemindaian, tetapi perbedaan besar untuk pemindaian yang mencoba beberapa upaya di server.
Berikan
2
Fail2ban (atau serupa) semoga akan lebih dari sekedar / phpmyadmin. Dengan asumsi ia memiliki segala jenis akses jarak jauh, pemblokiran tipe F2B (3 kata sandi dan Anda ... sudah ... hilang!) Adalah lebih dari sekadar 404-an.
WernerCD
3
Jika Anda melakukan sesuatu seperti ini, pastikan untuk menetapkan larangan agar kedaluwarsa relatif cepat (beberapa jam, maksimum), atau Anda berisiko mengunci pengguna yang sah jika serangan itu berasal dari IP yang dialokasikan secara dinamis.
Jens Neubauer
7

Apa yang saya lakukan adalah meletakkan skrip kecil ke direktori yang sesuai, jadi itu berjalan jika seseorang mengakses / phpmyadmin /. Skrip itu tidak melakukan apa-apa selain memanggil iptables (di Linux), yang memblokir alamat IP yang mengakses skrip selama 30 menit (setelah itu cron-job mem-flush rantai iptables yang ditambahkan alamat IP).

Keuntungan dibandingkan fail2ban adalah Anda tidak menggunakan sumber daya apa pun untuk mem-parsing syslog / akses-log. Kerugiannya, tentu saja, adalah Anda tidak memeriksa hal lain, kecuali mengakses alamat yang sangat spesifik ini.

Mengapa saya melakukan ini? Tentu, melayani 404 akan mudah bagi server, tapi saya tidak ingin mereka melihat-lihat, sesederhana itu. Saya ingin membuang waktu alat mereka, menunggu server untuk membalas, mencoba lagi sampai akhirnya menyerah. Selain itu, jika Anda tidak memblokirnya, mereka akan mencoba banyak URL yang berbeda sebelum akhirnya pindah - terkadang lebih dari seribu. Tergantung pada alatnya, itu mungkin "bagus" dan ruang yang keluar selama beberapa jam, atau mungkin tidak peduli dan menumbuk server Anda dengan semuanya dalam beberapa menit.

Mengapa saya tidak melayani halaman yang valid? Alat mereka mungkin berhenti memindai Anda dan mengingatkan skiddie yang menjalankannya - yang kemudian harus memeriksa secara manual. Sisi buruknya adalah mereka akan memberi server Anda tampilan yang lebih dekat daripada yang seharusnya, jika pemindaian mereka tidak membuat Anda muncul dalam hasil mereka. Mungkin mereka akan melihat-lihat sedikit lebih banyak, mungkin beberapa scan port, mungkin Anda membuatnya marah, dan mereka meluncurkan DoS untuk melihat apakah mereka dapat melakukan apa saja. Hanya memblokir mereka - yang dari sudut pandang mereka membuat waktu server habis saat mereka mengakses skrip phpmyadmin - efektif membuang-buang waktu alat mereka, sambil menghindari perhatian yang tidak diinginkan.

Jika Anda memiliki phpMyAdmin di server, solusi yang efektif mungkin meletakkannya di direktori terpisah, dan gunakan kontrol kata sandi server web Anda (.htpasswd untuk Apache) untuk memblokir akses sebelum ada yang mencapainya.

Aaa
sumber
Kedengarannya seperti pilihan alternatif yang baik ... tetapi bukankah itu mengharuskan server web untuk dapat menjalankan skrip dengan izin root?
Berikan
1
Sesuaikan alias untuk alat seperti phpMyAdmin. Perubahan sederhana ke file konfigurasi untuk mengubahnya ke adminMyPhp atau chrisPhpAdmin ... atau sesuatu yang tidak akan di-script-kiddied.
WernerCD
Maaf atas keterlambatan balasan - tidak (harus). Anda dapat menggunakan sudo (dengan file sudoers) untuk memungkinkan server web untuk mengeksekusi satu skrip terkenal (dan skrip itu saja) dengan izin root. Skrip itu akan menerima (sebagai parameter) IP, dan Anda memeriksanya dengan ekspresi reguler ([0-9] + \. [0-9] + \. [0-9] + \. [0-9] + ) untuk memastikan itu tidak menyuntikkan sesuatu yang aneh.
Aaa
1

FWIW kami membatasi akses ke / phpmyadmin / hanya untuk Alamat IP yang masuk daftar putih.

Kami juga menggunakan mod_evasive (pada apache2) untuk mencegah DOS / serangan skrip berperilaku buruk.

pengguna204880
sumber
1

ikat alat admin mysql ke alamat loopback mesin Anda 127.0.0.1

kemudian gunakan ssh dengan port forwarding untuk mengakses bagian belakang admin Anda.

tambahkan lapisan keamanan tambahan yang bisa sangat transparan.

Unix Janitor
sumber
-4

Cara terbaik yang kami temukan adalah untuk melindungi folder dengan kata sandi phpmyadmin. Juga, jangan gunakan apa pun yang berhubungan dengan phpmyadmin sebagai nama folder: pma, phpmy, dll ...

WeWatchYourWebsite Anda
sumber
2
Dari pertanyaan: None of these directories exist, I don't even have phpmyadmin on my server.- Dia tidak bertanya bagaimana mengeraskan instal yang ada ... dia bertanya apa yang harus dilakukan tentang hal-hal yang tidak ada. Anda tidak dapat mengganti nama PMAatau apa yang Anda miliki jika tidak ada.
WernerCD