Haruskah jejak stack berada di pesan kesalahan yang disajikan kepada pengguna?

45

Saya punya sedikit argumen di tempat kerja saya dan saya mencoba mencari tahu siapa yang benar, dan apa hal yang benar untuk dilakukan.

Konteks: aplikasi web intranet yang digunakan pelanggan kami untuk akuntansi dan hal-hal ERP lainnya.

Saya berpendapat bahwa pesan kesalahan yang disajikan kepada pengguna (ketika terjadi crash) harus memasukkan informasi sebanyak mungkin, termasuk jejak stack. Tentu saja, ini harus dimulai dengan "Kesalahan telah terjadi, silakan kirimkan informasi di bawah ini kepada pengembang" dalam huruf besar dan ramah.

Alasan saya adalah tangkapan layar dari aplikasi yang mogok sering kali menjadi satu-satunya sumber informasi yang mudah tersedia. Tentu, Anda dapat mencoba menghubungi administrator sistem klien, berusaha menjelaskan di mana file log Anda, dll, tetapi itu mungkin akan lambat dan menyakitkan (kebanyakan berbicara dengan perwakilan klien).

Juga, memiliki informasi langsung dan lengkap sangat berguna dalam pengembangan, di mana Anda tidak perlu mencari file log untuk menemukan apa yang Anda butuhkan pada setiap pengecualian. (Tapi itu bisa diselesaikan dengan sakelar konfigurasi.)

Sayangnya ada semacam "audit keamanan" (tidak tahu bagaimana mereka melakukannya tanpa sumber ... tapi apa pun), dan mereka mengeluh tentang pesan pengecualian penuh yang menyebut mereka sebagai ancaman keamanan. Tentu saja, klien (setidaknya satu yang saya tahu) telah mengambil ini pada nilai nominal dan sekarang menuntut agar pesan dibersihkan.

Saya gagal melihat bagaimana seorang penyerang potensial dapat menggunakan jejak stack untuk mencari tahu apa yang dia tidak tahu sebelumnya. Apakah ada contoh, bukti terdokumentasi dari siapa pun yang pernah melakukan itu? Saya pikir kita harus melawan ide bodoh ini, tapi mungkin aku yang bodoh di sini, jadi ...

Siapa yang benar

Vilx-
sumber
25
Wow. Cuma wow. " Unfortunately there has been some kind of "Security audit"" - Serius? Sikap seperti apa itu? Audit keamanan adalah untuk keuntungan Anda - untuk membuat sistem Anda lebih baik, untuk menemukan masalah sebelum orang jahat melakukannya. Anda harus benar-benar mempertimbangkan untuk mencoba bekerja dengan mereka, bukan melawan mereka. Anda juga dapat mencoba untuk mendapatkan informasi lebih lanjut tentang PoV keamanan di Keamanan Informasi .
AviD
7
Dan btw, audit keamanan tidak selalu memerlukan akses ke kode sumber, mereka mungkin melakukan tes penetrasi kotak hitam, mensimulasikan apa yang akan dilakukan oleh pengguna jahat - mencoba menyerang aplikasi sebagai pengguna. Meskipun saya setuju bahwa akses ke kode sumber dapat memungkinkan bentuk audit yang jauh lebih efektif. :-)
AviD
1
@ViD - sebenarnya, saya tidak tahu apa yang mereka analisis, tetapi dari beberapa laporan saya melihat itu seperti tes kotak hitam bagi saya. Sejujurnya, saya tidak ingin menentang mereka. Memang, saya memang menyukai berita itu ketika saya mendengarnya. Tetapi "kerentanan" khusus mereka ini bagi saya tampak konyol. Dalam setiap keputusan keamanan Anda harus mempertimbangkan pengurangan ancaman terhadap pengurangan kegunaan. Dalam hal ini saya pikir itu mengurangi kegunaan lebih daripada meningkatkan keamanan.
Vilx-
1
Saya sangat setuju tentang penimbangan, tetapi saya tidak setuju tentang penerapannya. Ini membahayakan keamanan lebih dari yang Anda pikirkan, dan saya juga berpikir bahwa cara Anda (setelah melakukan ini sendiri juga, sampai saya berbicara dengan beberapa pengguna .....) lebih buruk untuk kegunaan. Pikirkan dalam istilah berorientasi tugas - seperti jawaban @ Jon berkata, caranya membuat pekerjaan pengguna lebih baik. Pengguna tidak perlu peduli dengan tumpukan (kecuali jika pengguna Anda adalah pengembang ...) Tapi, keahlian saya di bidang keamanan - dan risikonya nyata.
AviD
1
@ AVI - Mungkin Anda bisa mengarahkan saya ke beberapa sumber yang menjelaskan bagaimana jejak tumpukan bisa berbahaya? Saya siap menerimanya, tetapi saya menginginkan sesuatu yang lebih dari prinsip umum "hanya perlihatkan apa yang Anda butuhkan".
Vilx-

Jawaban:

73

Saya cenderung membuat log aplikasi, baik dalam DB atau dalam file, dan mencatat semua informasi seperti itu. Anda kemudian dapat memberikan nomor kesalahan kepada pengguna, yang mengidentifikasi item log mana yang terkait dengan kesalahan, sehingga Anda bisa mendapatkannya kembali. Pola ini juga berguna karena Anda dapat mengikuti kesalahan bahkan jika pengguna tidak repot-repot mengangkatnya bersama Anda, sehingga Anda bisa mendapatkan ide yang lebih baik tentang di mana masalahnya.

Jika situs Anda dipasang di lingkungan klien dan Anda tidak dapat mencapainya, Anda bisa mendapatkan departemen TI di tempat untuk mengirimkan Anda beberapa ekstrak berdasarkan kesalahan no.

Hal lain yang dapat Anda pertimbangkan adalah memiliki rincian kesalahan sistem email ke kotak surat yang Anda lihat, sehingga Anda tahu ketika ada masalah.

Pada dasarnya memiliki sistem yang menumpahkan nyali ketika ada sesuatu yang tidak benar tidak menginspirasi kepercayaan pada pengguna non-teknis - cenderung menakut-nakuti mereka untuk berpikir ada sesuatu yang sangat salah (misalnya berapa banyak BSOD yang Anda pahami, dan bagaimana melakukan Anda rasakan ketika seseorang muncul)?

Pada stacktrace:

Di .Net, jejak tumpukan akan menampilkan jejak penuh langsung ke kumpulan sumber inti MS, dan akan mengungkapkan detail tentang teknologi apa yang Anda gunakan, dan kemungkinan versi juga. Ini memberikan informasi berharga kepada penyusup tentang kemungkinan kelemahan yang dapat dieksploitasi.

Jon Egerton
sumber
6
Saya suka jawaban Anda karena menyajikan "jalan tengah" - jangan ditampilkan, tetapi buat pencarian pengecualian menjadi mudah. Saya akan mencoba untuk mendorong itu sekarang, saya berharap mereka akan setuju. Terima kasih!
Vilx-
2
Saya pikir ini cukup banyak pendekatan "dewasa" standar. Juga, stacktrace memang memberikan banyak informasi, namun saya belum menemukan solusi yang dapat secara otomatis mencatat informasi negara bersama dengan stacktrace (tanpa perubahan kode di mana-mana). Tampaknya menulis debugger Anda sendiri dan melampirkannya adalah salah satu cara yang mungkin untuk dilakukan, tetapi jauh dari sepele untuk diterapkan.
Daniel B
@DanielB: Dalam aplikasi web dimungkinkan untuk mendapatkan beberapa hal umum (seperti userid, clientid, dll) dari sesi / cache - karena tetap "global", bahkan banyak informasi ini dapat membantu mereproduksi kesalahan dengan sangat besar. Lebih terperinci dari itu sangat rumit seperti yang Anda katakan.
Jon Egerton
2
Beberapa pengguna aplikasi yang sangat kritis menuntut solusi segera untuk setiap kesalahan yang menghambat jalannya bisnis normal. Semua proses komunikasi yang melibatkan berbagai disiplin ilmu hanya untuk pemecah kesalahan untuk mendapatkan tumpukan kesalahan dapat dengan mudah menghabiskan 1 jam atau lebih ketika kesalahan terjadi larut malam atau akhir pekan.
Tulains Córdova
1
@ user1598390: Setuju, dalam hal ini penyalinan detail kesalahan ke kotak surat dukungan yang dipantau dapat mempercepat pengumpulan informasi, hingga staf pendukung mengetahui ada sesuatu yang rusak bahkan sebelum pengguna melakukannya.
Jon Egerton
29

Ya, ada banyak.

Jejak tumpukan dapat mengungkapkan

  • algoritma enkripsi apa yang Anda gunakan
  • apa beberapa jalur yang ada di server aplikasi Anda
  • apakah Anda benar membersihkan input atau tidak
  • bagaimana objek Anda dirujuk secara internal
  • versi dan merek basis data apa di belakang front-end Anda

... daftarnya terus berlanjut. Pada dasarnya setiap keputusan desain dalam aplikasi besar mungkin relevan dengan keamanan, dan hampir semuanya dapat diberikan melalui metode atau nama modul. Pikiran Anda, itu tidak berarti masih tidak masuk akal untuk menampilkan jejak tumpukan jika lingkungan itu diserahkan aman (misalnya intranet daripada situs web yang menghadap internet), tetapi biaya dalam keamanan pasti bukan nol .

Kilian Foth
sumber
6
Saya setuju sebagian besar, tetapi beberapa hal ini seharusnya tidak masalah. Misalnya, algoritma enkripsi apa yang Anda gunakan tidak harus dirahasiakan untuk mengamankan sistem Anda.
Oleksi
3
Seharusnya tidak masalah, tetapi dunia tidak sempurna, dan sering kali memang demikian. Itulah mengapa pertahanan mendalam (melakukan banyak hal secara bersamaan yang seharusnya cukup jika sempurna) penting.
Kilian Foth
3
Sejujurnya, jika tumpukan jejak mengungkapkan sesuatu yang bisa membantu penyerang, maka Anda salah melakukannya !
Mark Booth
3
@MarkBooth statistik berbicara, Anda mungkin sedang melakukannya salah. Tidak, goreskan itu - kepastian statistik bahwa Anda salah melakukannya. Apakah Anda benar-benar ingin membiarkan penyerang menemukan bug keamanan Anda sebelum melakukannya?
AviD
1
@AviD - Tidak, saya setuju, alasan yang paling menarik untuk tidak menampilkan jejak stack kepada pengguna adalah bahwa mereka tidak tahu apa yang harus dilakukan dengan mereka, dan sistem logging Anda harus aman dan mampu menangkap lebih banyak status daripada tangkapan layar. dari halaman web yang pernah bisa.
Mark Booth
15

Masalahnya, itu bukan tugas utama kita untuk membuat segalanya lebih mudah pada diri kita sendiri. Adalah tugas kami untuk membuat segalanya lebih mudah bagi pengguna akhir. Bagi kami, jejak tumpukan tampak seperti sepotong informasi yang sangat berguna untuk disediakan pengembang. Untuk pengguna, sepertinya omong kosong lengkap yang tidak berguna sama sekali. Bahkan jika Anda memberi tahu mereka sebaliknya, mereka tidak menginternalisasi itu. Jika Anda merasa sulit mendapatkan informasi itu dari administrator sistem, mendapatkannya dari pengguna akhir bahkan lebih buruk.

Sejauh keamanan berjalan, Anda mungkin ada benarnya jika itu adalah aplikasi desktop. Dalam hal itu, mencetak jejak tumpukan tidak memberikan apa pun yang belum diketahui oleh penyerang. Pada aplikasi web, informasi itu belum tersedia untuk penyerang. Anda memang mengekspos detail internal yang akan membuat serangan jauh lebih mudah.

Mengapa tidak melewati kedua sumber yang menjadi perhatian dan mendapatkan laporan pengecualian secara otomatis dikirimkan kepada Anda? Dengan begitu Anda bahkan tidak perlu khawatir tentang orang yang tidak melaporkan kesalahan.

Karl Bielefeldt
sumber
2
Pengguna mendapat manfaat dari perbaikan cepat masalah mereka berkat info yang disediakan oleh jejak stack. Tapi saya mengerti maksud Anda.
Tulains Córdova
11

Lihatlah pertanyaan IT Security SE ini . Singkatnya, tumpukan jejak dapat memberi penyerang lebih banyak informasi untuk dikerjakan. Semakin banyak informasi yang dimiliki penyerang, semakin besar kemungkinan mereka untuk menembus sistem Anda. Saya tidak akan mendasarkan keamanan saya pada kenyataan bahwa tumpukan jejak selalu disembunyikan, tetapi itu juga tidak berarti bahwa Anda harus memberikan informasi itu kepada penyerang.

Anda bisa mendapatkan sebagian besar manfaat dari pencatatan backend yang tepat. Ini sedikit kurang nyaman, tetapi mungkin tidak layak mempertaruhkan keamanan sistem Anda dan mengganggu pelanggan Anda.

Oleksi
sumber
8

Anda mungkin mempertimbangkan untuk tidak menunjukkan jejak tumpukan karena alasan berikut

Keamanan

Menampilkan jejak tumpukan mengungkapkan kemungkinan permukaan serangan adalah peretas. Intranet tidak kebal dari peretasan. Ini akan berdampak buruk pada Anda jika jaringan Anda diretas karena aplikasi yang Anda bertanggung jawab

Pengalaman pengguna

Untuk pengalaman terbaik pengguna, jejak strack terlalu banyak informasi. Ya, informasi yang tepat tentang kondisi kesalahan harus dicatat dan diperhatikan oleh seorang insinyur. Namun, meminta pengguna untuk melakukan apa yang dapat Anda lakukan secara otomatis tidak akan menjadi yang terbaik bagi pengguna.

Reputasi Anda

Setiap kali jejak tumpukan ditampilkan di situs web, itu terlihat buruk. Kebanyakan orang tidak tahu apa itu dan yang membuat mereka merasa seperti situs web tidak ramah kepada mereka. Bagi mereka yang tahu apa itu, mungkin itu indikasi bahwa aplikasi itu tidak dipikirkan dengan baik. Banyak aplikasi yang ditulis dengan buruk menunjukkan jejak stack terlalu sering karena itu adalah default dalam beberapa kerangka kerja seperti ASP.Net.

Tom Resing
sumber
6
Sebagai pengembang perangkat lunak, ketika saya melihat jejak tumpukan di layar, langsung saya adalah "Inilah seorang badut yang tidak tahu apa-apa tentang berurusan dengan kesalahan, kurang peduli tentang mereka, dan dan mungkin bahkan lebih sedikit tentang pengguna". Lainnya berputar di sekitar "ini adalah perangkat lunak jelek, tidak aktif tidak berfungsi, penanganan kesalahannya tidak berfungsi" dan "WTF .... Saya tidak melakukan pekerjaan ini untuknya" Apa yang ingin diketahui pengguna adalah apa dia perlu lakukan untuk memperbaikinya. Bagaimana jejak stack melakukan itu.
mattnz
6

Jawaban singkat: Di situs ekstranet atau internet, masuk akal untuk tidak menampilkan stacktrace. Dalam intranet, manfaat menunjukkan stacktrace melampaui yang menyembunyikannya.

Jawaban panjang:

Hal yang sama terjadi pada saya di tempat kerja. Dulu saya berpikir bahwa jika suatu aplikasi gagal, itu harus gagal dengan berisik.

Tetapi kemudian mereka menjelaskan kepada saya bahwa seorang hacker potensial dapat melakukan banyak hal dari stacktrace.

Saya pikir tidak perlu bukti. Jelas bahwa semakin banyak peretas yang tahu tentang platform Anda, semakin baik baginya dan semakin sedikit peretas yang tahu tentang platform Anda, semakin baik bagi Anda .

Juga perusahaan tidak ingin mengungkapkan bagaimana seorang hacker membobol sistem mereka.

Di sisi lain, ini adalah intranet , dan saya pikir keuntungan mengetahui secara tidak langsung apa yang salah tanpa harus mencari file log adalah keuntungan besar dan risiko keamanan menunjukkan stacktrace di dalam batas-batas perusahaan Anda tidak setinggi kata mereka.

Tulains Córdova
sumber
1
apa saja "keuntungan mengetahui secara tidak langsung apa yang salah", dan mengapa mereka tidak dapat diambil dari file log? Tampaknya dengan Intranet, Anda dapat mengakses file log dengan lebih mudah daripada dari situs klien.
Wonko the Sane
Dalam skenario saya, ada aplikasi kritis yang memiliki prioritas "7/24". Meja bantuan panggilan pengguna, jika masalahnya adalah kesalahan atau pengecualian aplikasi, meja bantuan memanggil pengelola yang mungkin berada di luar lokasi. Dengan info kesalahan, pakar dapat memerintahkan orang di lokasi untuk menyelesaikan masalah ... Sering kali waktu yang dihemat sangat berharga jika aplikasi ini sangat penting bagi bisnis. jika ahli bahwa jika off premisses terlebih dahulu terhubung ke perusahaan, cari log, dll., fungsi bisnis penting bisa menunggu tidak perlu.
Tulains Córdova
3
@ user1598390 jadi buatlah mekanisme melihat log. Halaman web sederhana, masukkan id insiden, dan helpdesk dapat melihat seluruh log yang relevan. Tentu saja membatasi akses ke fitur ini, dan sebagainya ...
AviD
Hanya karena aplikasi ada di intranet perusahaan Anda, bukan berarti tidak ada pengguna jahat di dalamnya. Ada banyak karyawan yang tidak puas di luar sana yang mungkin menyalahgunakan sistem internal untuk keuntungan mereka sendiri. Karena karyawan ini tahu banyak tentang perusahaan dan kebijakannya, mereka sebenarnya bisa lebih berbahaya daripada peretas internal. Menelusuri file log adalah tugas yang sangat sepele, terutama jika Anda mengikuti praktik yang baik dan juga mencatat kesalahan ke file log kesalahan tertentu.
cliff.meyers
5

Dalam setiap produk yang dikirim, jumlah yang diharapkan dari jenis kesalahan ini harus nol. Utilitas informasi ini kepada pelanggan adalah nol. Dalam kedua hal tersebut, tidak ada alasan untuk menyajikan jejak tumpukan. Jika ada beberapa konteks yang bermanfaat, itu harus disajikan dengan cara yang ramah pelanggan, bukan sebagai tumpukan jejak.

Di sisi lain, jika jumlah kejadian sebenarnya tidak nol, Anda sangat membutuhkan informasi ini, dan tidak boleh bergantung pada pelanggan untuk mengirimkannya kepada Anda. 99,99% dari waktu mereka tidak mau. Anda harus menginstal sistem pelaporan bug yang mengirimkan informasi secara otomatis, dengan hanya "ok" dari pelanggan.

ddyer
sumber
Saya akan mengubah jawaban ini untuk baris berikut saja: "Utilitas informasi ini untuk pelanggan adalah nol." . Setiap detail teknis tentang bagian dalam suatu produk harus disembunyikan kecuali ada alasan bagus untuk tidak melakukannya karena alasan sederhana kesederhanaan dan kegunaan untuk pengguna akhir produk.
Kjartan