Apakah aman untuk server produksi untuk menginstal?

42

Selama pengaturan server virtual saya, saya memerlukan beberapa aplikasi yang akan dibangun menggunakan make. Apakah ada risiko keamanan yang terkait dengan makepemasangan? Atau haruskah saya membersihkannya sebelum instance digunakan?

Saya juga memiliki gcckompiler di server yang saya gunakan untuk membangun aplikasi sebelum penyebaran.

SK '
sumber
4
Jika itu membuat Anda merasa lebih baik, setiap bagian dari perangkat lunak yang diinstal di mana saja menciptakan kerentanan.
MDMoore313
1
Dan seseorang dengan akses shell non-root ke server dapat mengunduh paket kompiler "distro independent" (.tar.gz) yang tidak perlu diinstal jadi ...
1
Apakah ini saya, atau kombinasi dari "apakah ini aman?" dan "akses root" agak tidak nyaman ?
DNA
2
Jika Anda sudah menginstal gcc, praktis tidak ada cara untuk memperburuk masalah keamanan potensial.
Shadur
1
@ Safad Apa perbedaan yang dimiliki GCC? Jika pengguna sudah memiliki akses ke mesin, mereka dapat mengunggah salinan gcc apa pun secara sepele. Bagaimanapun, gcc dapat bermanfaat bagi pengguna yang tidak memiliki hak pribadi dan bukan risiko keamanan selama tidak ada pengguna yang istimewa yang menjalankannya.
Vality

Jawaban:

50

Beberapa orang akan berpendapat bahwa kehadiran alat pengembangan pada mesin produksi akan membuat hidup lebih mudah bagi penyerang. Namun ini adalah penghalang kecil bagi penyerang, sehingga argumen lain yang dapat Anda temukan atau tidak menginstal alat pengembangan akan lebih berat.

Jika penyerang mampu menembus sistem sejauh ini, bahwa mereka dapat meminta alat apa pun yang ada di server, maka Anda sudah memiliki pelanggaran keamanan yang serius. Tanpa alat pengembangan ada banyak cara lain untuk menulis data biner ke file dan kemudian menjalankan chmod pada file itu. Seorang penyerang yang ingin menggunakan custom build dapat dieksekusi pada sistem pada saat ini bisa juga membangunnya di mesin mereka sendiri dan mentransfernya ke server.

Ada hal-hal lain yang jauh lebih relevan untuk diwaspadai. Jika perangkat lunak yang terinstal berisi bug keamanan, ada beberapa cara itu bisa terkena penyerang:

  • Paket dapat berisi suid atau sgid yang dapat dieksekusi.
  • Paket tersebut dapat memulai layanan pada sistem.
  • Paket dapat menginstal skrip yang dipanggil secara otomatis dalam keadaan tertentu (ini termasuk pekerjaan cron, tetapi skrip dapat dipanggil oleh peristiwa lain misalnya ketika keadaan antarmuka jaringan berubah atau ketika pengguna login).
  • Paket dapat menginstal inode perangkat.

Saya tidak akan mengharapkan alat pengembangan untuk mencocokkan salah satu di atas, dan karena itu bukan paket berisiko tinggi.

Jika Anda memiliki alur kerja di mana Anda akan menggunakan alat pengembangan, maka Anda pertama-tama harus memutuskan apakah itu alur kerja yang masuk akal, dan jika ada, Anda harus menginstal alat pengembangan.

Jika ternyata Anda tidak benar-benar membutuhkan alat-alat itu di server, Anda harus menahan diri untuk tidak menginstalnya karena beberapa alasan:

  • Menghemat ruang disk, baik di server maupun di cadangan.
  • Perangkat lunak yang kurang terinstal memudahkan Anda melacak dependensi Anda.
  • Jika Anda tidak membutuhkan paket itu, tidak ada gunanya mengambil risiko keamanan tambahan dari menginstalnya, bahkan jika risiko keamanan itu kecil.

Jika Anda memutuskan bahwa karena alasan keamanan, Anda tidak akan mengizinkan pengguna yang tidak memiliki hak untuk menempatkan executabel mereka sendiri di server, maka yang harus Anda hindari bukanlah alat pengembangan, melainkan direktori yang dapat ditulis oleh para pengguna pada sistem file yang dipasang dengan izin pelaksanaan. Mungkin masih ada gunanya untuk alat pengembangan bahkan di bawah keadaan itu, tetapi itu tidak terlalu mungkin.

kasperd
sumber
6
Saya akan menambahkan ini bahwa sejumlah sistem produksi bergantung pada kode yang ditafsirkan (misalnya PHP, Perl, Python, ...). Melarang alat pengembangan dalam konteks ini tidak masuk akal. Saya akan mempertimbangkan kompiler seperti gcctidak menyajikan risiko yang lebih tinggi daripada ini. Seperti yang Anda katakan, seorang penyerang dalam posisi untuk menggunakan kompiler yang diinstal pada suatu sistem umumnya akan berada dalam posisi untuk melakukan hal-hal yang lebih buruk, seperti mengunggah executable mereka sendiri (mungkin terhubung secara statis) yang dapat dieksekusi.
Bruno
3
Relevan: Versi kecil wget (51 byte?) . Contoh kehidupan nyata seorang penyerang memindahkan biner ke server menggunakan echopernyataan selanjutnya ke dalam file. Seluruh proses diotomatisasi dengan skrip yang ditemukan di tautan yang sama.
Adi
2
@ Adnan, menarik. Sejauh yang saya tahu, kelemahan keamanan utama dalam contoh DVR ini adalah fakta bahwa penyerang dapat telnet ke sana sebagai root dengan kata sandi 123456 di tempat pertama. Memiliki atau tidak memiliki wget atau alat-alat lain (sebelum serangan itu) memang nyaris tidak relevan.
Bruno
15

makeadalah shell yang memiliki sintaks yang berbeda dari bash.

Seperti kompiler gccadalah yang kuat awkdikonfigurasikan dengan serangkaian pergantian yang awktidak didukung standar . Ini adalah non-POSIX-compliant sortatau catyang menyuntikkan sampah di output. Ini adalah editor teks interaktif (think vi) yang dikonfigurasi untuk melakukan beberapa pengeditan saat startup, kemudian keluar sebelum menampilkan antarmuka pengguna.

Tidak ada yang secara inheren tidak aman di dalamnya, mereka tidak membuat mesin Anda lebih tidak aman daripada yang Anda miliki dengan bash + cat+ shell redirection.

ignis
sumber
2
Sebuah jawaban jadi zen saya tidak tahu bagaimana menilai itu.
kasperd
4
@kasperd Jawaban ini dimaksudkan untuk menjadi serius. Saya pikir membawa sudut pandang programmer bisa sangat membantu. Fungsi yang menerjemahkan input ke output tidak memperkenalkan kerentanan hanya karena outputnya dalam format yang dapat dimengerti oleh CPU.
ignis
1
Saya setuju dengan poin yang Anda buat. Saya pikir jawaban Anda adalah bacaan yang bagus untuk siapa saja yang sudah setuju dengan itu. Saya hanya khawatir jawaban Anda mungkin dianggap sebagai lelucon bagi seseorang yang tidak setuju dengan itu.
kasperd
Saya suka jawaban ini lebih dari jawaban yang diterima :)
Ruslan
15

makeitu sendiri baik-baik saja. makehanyalah kerangka kerja pelacakan dan otomatisasi ketergantungan. Ini biasanya digunakan bersama dengan kompiler, dan yang lebih disukai tidak harus tersedia pada sistem produksi, karena mereka sama sekali tidak diperlukan. Hal yang sama berlaku untuk semua paket yang tidak diperlukan, apakah itu adalah shared library, interpreter, dll. Perangkat lunak yang diinstal pada sistem produksi harus dikontrol secara ketat, dan hanya paket-paket yang diperlukan oleh aplikasi yang harus hadir.

Anda harus membangun aplikasi di server build, mengemasnya, dan kemudian menggunakan paket biner ke sistem produksi Anda.

Catatan: alat pengemasan asli menyedot . Jangan repot-repot mencoba menggosok mereka. Sebagai gantinya, periksa Jordan Sissel's fpm. Itu membuat pengemasan menjadi sukacita mutlak.

EEAA
sumber
8
Saya bertanya karena penasaran dan ketidaktahuan di sini: Mengapa Anda mengatakan bahwa kehadiran penyusun adalah "masalah keamanan yang signifikan?" Apa masalah keamanan dengan menginstal kompiler? Apakah hanya masalah Anda tidak boleh membangun kode Anda di server produksi di tempat pertama dan dengan demikian kompiler berlebihan, atau apakah sebenarnya ada masalah keamanan yang signifikan dengan keberadaan kompiler itu sendiri?
reirab
11
Walaupun itu adalah ide yang baik untuk membangun aplikasi Anda di server yang terpisah, mengatakan keberadaan kompiler pada sistem produksi adalah masalah keamanan yang signifikan tidak masuk akal. Bagaimana dengan bahasa scripting dan sistem yang dikompilasi JIT (Perl, Python, Java, ...)?
Bruno
3
Kehadiran kompiler pada lingkungan produksi bukanlah "risiko keamanan yang signifikan". Saya sendiri, telah memindahkan binari ke kotak yang dikompromikan menggunakan echodan base64. Bahkan, Anda bahkan dapat melakukannya dengan serangkaian echopernyataan dan tanpa alat lain .
Adi
1
Poin bagus, semua. Saya telah mengedit jawaban saya untuk menjelaskan.
EEAA
9

Sebaliknya, masalah potensial tidak ada makepada server produksi, masalah potensial adalah dengan membangun aplikasi pada server produksi alih-alih menggunakan gambar pra-bangun yang teruji. Mungkin ada alasan yang masuk akal untuk metodologi ini, tapi itu salah satu yang saya akan bantah dengan keras seandainya saya diminta untuk menerapkannya.

John
sumber
4

Anda bertanya apakah makeharus diinstal pada server produksi, tetapi pertanyaan saya yang sebenarnya adalah: Siapa yang memiliki akses ke server produksi itu & perlindungan apa yang Anda miliki untuk menangani serangan? Jika maketidak diinstal tetapi seseorang mendapatkan rootakses, coba tebak? Mereka dapat menginstal secara manual makedan apa pun yang mereka inginkan.

Kenyataan pahit tentang keamanan komputer adalah sebanyak yang Anda inginkan untuk mencegah akses yang tidak diinginkan, terobsesi dengan pemblokiran akses tidak sepenting:

  1. Siapa yang memiliki akses ke server?
  2. Apa yang dapat Anda lakukan untuk mengembalikan setelah istirahat?

Ini semua tergantung pada jenis pekerjaan yang Anda lakukan. Saya bekerja terutama di dunia server web & sikap saya pada dasarnya, siapa pun yang mendapatkan akses server produksi dari saya perlu membuktikan keterampilan, pengetahuan & kedewasaan. Itu dia. Terkadang butuh beberapa hari. Terkadang butuh berbulan-bulan. Tetapi pada dasarnya, garis keamanan terbaik Anda di server produksi adalah mengontrol akses di atas berbagai hal lain yang kami lakukan untuk mengeraskan server.

JakeGould
sumber
1

makeitu sendiri tidak berbahaya. Semua yang dilakukannya adalah menjalankan aplikasi dalam urutan yang ditetapkan, tergantung pada dependensi yang Anda tentukan dan file apa yang sudah ada dalam sistem. Itu bahkan dapat berguna sebagai bagian dari proses instalasi: Anda dapat menggunakannya untuk meletakkan file prebuilt ke mana mereka harus pergi, atau menjalankan tes unit, atau hal-hal lain.

Namun, Anda perlu mempertimbangkan apa yang sebenarnya Anda ingin menggunakannya untuk. Ini sering digunakan bersama dengan kompiler dan alat lain untuk membangun aplikasi, dan itu dapat digunakan untuk meniadakan beberapa lini pertahanan Anda. Tetapi maketidak dapat melakukan hal-hal ini jika alat tidak tersedia.

Spooniest
sumber