Menempatkan seluruh server linux di bawah kendali sumber (git)

17

Saya berpikir tentang meletakkan seluruh server linux saya di bawah kontrol versi menggunakan git. Alasan di baliknya adalah bahwa itu mungkin cara termudah untuk mendeteksi modifikasi / rootkit berbahaya. Yang menurut saya naif diperlukan untuk memeriksa integritas sistem: Pasang partisi linux setiap minggu atau lebih dengan menggunakan sistem penyelamatan, periksa apakah repositori git masih belum dituntaskan dan kemudian keluarkan status git untuk mendeteksi segala perubahan yang dilakukan pada sistem .

Terlepas dari pemborosan yang jelas dalam ruang disk, apakah ada efek samping negatif lainnya?

Apakah ini ide yang benar-benar gila?

Apakah ini cara aman untuk memeriksa rootkit karena saya kemungkinan besar harus setidaknya mengecualikan / dev dan / proc?

Tobias Hertkorn
sumber
5
Saya akan memilih "ide yang benar-benar gila", terlalu banyak implikasinya. Perubahan pada file akan terjadi setiap saat dan akan membuat prosedur peningkatan menjadi mimpi buruk.
forcefsck
@forcefsck - mengapa perubahan file selalu terjadi? Tidakkah seharusnya itu terjadi begitu saja saat upgrade sistem?
Tobias Hertkorn
1
Pikirkan saja, mengapa tidak menggunakan sesuatu seperti dirvish atau rsync dengan --link-dest? Jika Anda menggunakan dirvish untuk membuat cadangan, itu akan memberi Anda laporan bagus untuk setiap cadangan yang menunjukkan apa yang berubah. Anda dapat rsync dalam mode --dry-run untuk membandingkan keadaan saat ini dengan cadangan Anda. Jika Anda menggunakan dirvish, Anda akan menggunakan alat yang diuji dengan baik sebagai sistem cadangan.
Zoredache

Jawaban:

16

Itu adalah "Ide Buruk" (tm). Selain dari semua yang lain, repositori Anda akan berjalan lambat karena semua heck, dan semakin buruk karena setiap revisi disimpan.

Coba manajemen terpusat, seperti boneka / cfengine / chef. Itu akan menjaga hal-hal seperti yang Anda harapkan, dan mengembalikan perubahan yang tidak terduga.

Gabungkan dengan sesuatu seperti iwatch untuk mendapatkan email dari perubahan file yang tidak sah.

Gabungkan lebih lanjut dengan file rpm / deb jika perlu untuk meluncurkan aplikasi khusus.

Lempar sesuatu seperti rkhunter atau chkrootkit sekarang dan kemudian untuk tendangan dan Anda harus baik untuk pergi.

Pekerjaan selesai.

Sirex
sumber
+1 for Bad Idea - Manajemen terpusat (boneka / cfengine / chef / radmind / dll.) Akan memberi Anda kemampuan untuk memastikan bahwa sistem Anda dikonfigurasi sesuai dengan persyaratan yang Anda tentukan, dan sebagian besar juga dapat digunakan sebagai "tripwire" ketik sistem untuk memberi tahu Anda saat barang berubah yang seharusnya tidak ada.
voretaq7
Saya pikir itu ide yang sangat buruk. Oke, Anda bisa melihat file mana yang baru dan diubah. Tetapi jika Anda menjalankan git, perlu banyak cpu untuk membongkar dan menghitung file Anda. Jika Anda melakukan ini secara keseluruhan, itu membutuhkan banyak waktu.
René Höhle
1
Saya akan melemparkan satu lagi di daftar itu; etckeeper akan melakukan git repo, kecuali hanya untuk / etc.
Shane Madden
repositori seperti git semakin cepat. Dan saya tidak khawatir tentang CPU atau IO karena server yang ada dalam pikiran saya telah dijadwalkan downtime (maka kemungkinan untuk me-mount menggunakan sistem penyelamatan)
Tobias Hertkorn
Apa yang saya tidak mengerti: bagaimana sistem manajemen terpusat menjamin bahwa tidak ada positif palsu - sistem dikompromikan + alat yang digunakan untuk memeriksa sistem dikompromikan = false positif
Tobias Hertkorn
5

Alternatif lain adalah dengan mengatur tripwire , yang merupakan perangkat lunak GPL yang melacak semua file penting di sistem Anda dan menentukan yang telah berubah dengan cara yang Anda tentukan tidak dapat diterima. Perubahan dapat didefinisikan sesederhana mtime, melalui nomor inode, sampai ke checksum yang kuat secara kriptografis.

Dibutuhkan beberapa pengaturan dan penyetelan jika Anda tidak ingin mendapatkan banyak laporan setiap malam tentang perubahan file /var/run, perubahan dalam file klien DHCP /etc, dan sejenisnya, tetapi jika Anda memang mengalami masalah, itu bisa memang sangat membantu.

Database properti file ditandatangani dengan kunci yang tidak dikenal oleh mesin, yang membantu Anda memiliki keyakinan bahwa tidak ada alat yang secara jahat mengubah database atau binari tripwire. Untuk kepastian lengkap, Anda dapat membakar salinan alat dan database tripwire ke media hanya baca, yang dapat dipasang di server dan digunakan untuk memverifikasi semua perubahan sejak disk dibakar, jika diperlukan analisis forensik lengkap.

Jika Anda akan melakukan ini, cukup penting untuk menyiapkan dan menjalankan tripwire sebelum mesin digunakan untuk produksi, atau Anda tidak pernah dapat sepenuhnya yakin bahwa beberapa pengguna jahat tidak memiliki kesempatan untuk menginfeksi mesin sebelum tripwired.

MadHatter
sumber
3

Saya tidak berpikir ini mungkin berhasil, tetapi sebagai percobaan saya ingin melihat apa yang terjadi jika Anda melakukan ini hanya dengan folder / etc. Di situlah sebagian besar informasi konfigurasi disimpan.

Joel Coel
sumber
4
Just / etc sedang dilakukan. Lihat kitenet.net/~joey/code/etckeeper (etckeeper)
Tobias Hertkorn
1
penjaga dll bekerja dengan sangat baik, saya merasa sangat berguna.
Zoredache
2

@ Sirex sudah memberikan jawaban yang sangat bagus, tetapi jika Anda ingin membuat langkah lebih jauh dengan keamanan, cara terbaik untuk mengatasinya adalah pencegahan pertama kemudian deteksi.

Coba atur sistem dengan / filesystem yang terpasang hanya baca. Jadikan / tmp ramf terpisah yang dipasang dengan opsi novec, nodev. Agar sistem bekerja, Anda hanya perlu / var untuk dipasang baca-tulis. Jadi di bawah / var mount sebuah fs dengan rw, noexec, nodev dan hapus hak akses tulis ke / var / tmp (afaik, jarang dibutuhkan oleh daemon dan itu harus dapat dikonfigurasi). Juga gunakan tambalan keamanan untuk kernel Anda untuk lebih membatasi akses ke sumber daya oleh pengguna, coba grsec misalnya. Gunakan firewall dengan aturan seketat mungkin.

Beberapa distribusi menyediakan dokumentasi ekstensif tentang pengerasan sistem. Sebagai contoh:

forcefsck
sumber
0

Saya pikir ini ide yang baik untuk menganalisis perubahan yang dilakukan alat di sistem Anda:

  1. instal Linux telanjang di VM
  2. inisialisasi root git
  3. instal alat yang ingin Anda analisis
  4. lihat semua perubahan gulungan yang dibuat di sistem Anda

... Hapus VM

Anda harus menambahkan banyak folder ke .gitignore file seperti proc, dll.

rubo77
sumber
0

Untuk situasi di mana Anda hanya tertarik untuk menjaga folder tertentu di seluruh sistem file di bawah kontrol versi, pendekatan berikut mungkin berfungsi:

Pertama, buat repositori Git di /level:

$ cd /
# git init

Kemudian buat /.gitignoredaftar putih itu hanya folder tertentu, misalnya untuk daftar putih saja /path/to/versioned/config/folder/(berdasarkan /programming//a/11018557/320594 ):

/*
!/path/
/path/*
!/path/to/
/path/to/*
!/path/to/versioned/
/path/to/versioned/*
!/path/to/versioned/config/
/path/to/versioned/config/*
!/path/to/versioned/config/folder/
!/.gitignore

Kemudian buat komit pertama:

# git add -A
# git commit -m "Initial commit"

Dan kemudian tambahkan folder tambahan yang Anda inginkan di bawah kontrol versi sesuai permintaan.

PS:

Selain metode sebelumnya, jika Anda perlu menjaga / etc / di bawah kontrol versi, Anda mungkin lebih suka menggunakan etckeeper( https://etckeeper.branchable.com/ ) untuk membuat versi folder tertentu karena lebih khusus untuk tujuan itu ( misalnya, ia melakukan secara otomatis setelah menginstal paket).

Jaime Hablutzel
sumber