Cara menulis kode Python yang aman. Makanan Kushal Das

Ini adalah versi bahasa Inggris asli dari wawancara ini.

Tahun ini, perusahaan pembicara Moscow Python Conf ++ mengambil apa yang diperlukan (yaitu, bagaimana, mengambil - Komite Program mengambil ). Tapi siapa yang tertarik untuk mempelajari prestasi, jauh lebih menarik apa yang dipikirkan pembicara tentang masalah yang menjadi perhatian kita. Untuk mengetahuinya, dapatkan informasi orang dalam atau saran dari pengembang yang lebih berpengalaman, dan Anda perlu berkomunikasi di konferensi. Tetapi saya mengambil keuntungan dari situasi ini dan mengambil wawancara singkat dari pembicara kami Kushal Das.

Ciri khas pidato Kushal adalah bahwa ia secara teratur menerbitkan cara "rahasia" untuk memecahkan kode Python dan, sebaliknya, menunjukkan cara menulis kode sehingga NSA tidak dapat memecahkannya. Di konferensi kami, saya makanakan memberi tahu Anda cara mengembangkan dan menggunakan kode Python dengan aman, jadi saya bertanya kepadanya tentang keamanan.



- Saya makan, tolong beri tahu kami sedikit tentang diri Anda dan tentang pekerjaan Anda dengan Python dan sejenisnya.

Kushal Das: Saya tinggal di India, sekarang saya bekerja sebagai teknolog kepentingan umum di organisasi nirlaba Amerika, Freedom of the Press Foundation, tempat saya membantu mendukung proyek SecureDrop. SecureDrop adalah platform informasi sumber terbuka. Bahasa utama di sini adalah Python.

Selain itu, saya terlibat dalam proyek sumber terbuka lainnya, termasuk bahasa Python itu sendiri. Saya adalah salah satu pengembang Inti CPython dan anggota Dewan Direksi Yayasan Python.

Saya telah bekerja dengan Python sejak 2005, dan hampir seluruh karier saya telah terhubung dengan bahasa ini, juga dengan Linux. Ini adalah dua bidang utama minat saya. Saya juga anggota Tim Inti Proyek Tor. Seperti yang sudah diketahui banyak orang, Tor membantu menjaga privasi Anda tetap online.

- Tor adalah proyek yang hebat, digunakan oleh pengembang di seluruh dunia untuk mendapatkan akses ke API dan dokumentasi diblokir, misalnya, karena undang-undang setempat. Presentasi Anda akan dibangun di sekitar keamanan, jadi saya punya beberapa pertanyaan.

Pertama-tama, ada pendapat bahwa untuk pengembang biasa tanpa pelatihan khusus, keamanan itu sendiri terlalu rumit. Dipercaya bahwa kita, sebagai industri, harus menyediakan alat dan ekosistem sehingga perangkat lunak yang kita buat aman secara default.

Apa yang menurut Anda masih lebih baik: untuk mendidik petugas keamanan atau memberi mereka beberapa alat?

Saya makan Das: Saya pikir mereka berdua. Memang, keamanan adalah masalah yang kompleks. Namun, jika seorang programmer pemula melalui pelatihan dasar atau bekerja sebagai sebuah tim, ia belajar untuk menghindari masalah yang paling umum.

Paling sering, kesalahan keamanan nyata, seperti peretasan, kebocoran data atau pencurian data, muncul karena konfigurasi yang salah, kurangnya pembaruan atau salah, terkadang kode hooligan.

Saya pikir sebagian besar kesalahan dasar dapat dihindari jika kita melatih pemula dan "orang tua" dalam industri ini. Selain itu, beberapa hal yang tidak dapat diakses oleh mata manusia dapat diungkapkan dengan bantuan alat baru, otomatisasi baru, proses baru.

Contoh yang sangat sederhana adalah pemeriksaan dependensi yang dimiliki GitHub sekarang. Jika aplikasi Python mengandung kesalahan atau menggunakan versi lama dari modul independen, dan ada kerentanan tertentu yang dijelaskan dalam CVE, GitHub dapat memberi tahu Anda sebagai pengembang: "Hai! Pembaruan diperlukan di sini! " - dan bot akan secara otomatis mencoba melakukan PR untuk memperbarui modul.

Dengan demikian, pelatihan dan alat-alat digabungkan, tetapi secara pribadi, saya masih lebih suka pelatihan sebanyak mungkin. Orang yang memasukkan data dan melakukan kesalahan. Teknologi tidak dapat memperbaiki semua kesalahan seperti itu.

- Ya, sayangnya. Pengembangan perangkat lunak modern sangat bergantung pada repositori terbuka seperti Indeks Paket Python, node.js, npm, dll. Pada tingkat perkembangan saat ini, ini biasanya terjadi ketika pip menginstal atau menambahkan puisi.

Menurut Anda, seberapa tinggi risiko keamanan untuk pengembang backend Python biasa di perusahaan menengah jika ia hanya menggunakan alat ini? Apakah risiko semacam itu dapat diterima, atau haruskah pengembang mempertimbangkan kerentanan sepele?

Kushal Das: Ini adalah pertanyaan yang sangat penting, karena di semua repositori yang kami dukung, tempat Anda dapat mengunduh modul untuk berbagai bahasa, kami mencoba membuat proses ini sederhana dan dapat diakses oleh pengembang.

Untuk Python, misalnya, ada milis keamanan Python yang mengingatkan Anda tentang masalah dengan modul dimuat terbaru untuk Python. Ada beberapa kasus yang disebut kesalahan ketik, ketika nama paketnya mirip dengan paket yang sangat terkenal, dan para pengembang menggunakan yang salah secara tidak sengaja. Di sisi Python, PyPI menangani hal-hal seperti itu.

Selain itu, ketika menginstal paket apa pun menggunakan pip, Anda dapat benar-benar memeriksanya dan memastikan bahwa inilah yang Anda butuhkan, serta memeriksa keamanan unduhan. Misalnya, ada PEP 458, yang menyarankan Anda untuk melindungi unduhan dengan penandatanganan paket PyPI.

Pekerjaan pengembangan instrumen keselamatan masih berlangsung. Saya akan merekomendasikan agar pengembang mulai bekerja dengan modul baru yang tidak ditandatangani untuk mencari tahu siapa penulisnya, berapa banyak orang yang terlibat dalam pengembangan, di mana mereka di-host, proyek besar apa yang digunakan, apa yang ada dalam kode sumber, apakah ada keluhan tentang masalah atau kesalahan, dll.

Ini hanya 15-30 menit pencarian, tetapi mereka memberikan banyak keuntungan. Jika tidak ada orang di dunia ini, kecuali penulisnya, yang menggunakan paket ini, mungkin sebaiknya Anda tidak menggunakannya. Jika modul khusus ini digunakan dalam paket atau perangkat lunak lain, maka kemungkinan besar kode Anda akan lebih aman.

— , , - , , , .

, , node.js npm, npm install something.

NPM memeriksa keamanan data dan menunjukkan hasilnya. Misalnya, ini menampilkan pesan: “Di antara paket yang baru saja Anda instal, ada dua dengan risiko keamanan tinggi dan sepuluh dengan risiko rata-rata. Anda dapat menjalankan perintah berikut untuk memperbaiki atau memperbaruinya, atau menolak untuk menginstal. " Ini mirip dengan alat bawaan. Apa pendapat Anda tentang solusi semacam itu, dan dapatkah Anda mengharapkan sesuatu yang serupa untuk PyPI?

Eaten Das: Saya tidak pernah menggunakan NPM, kecuali mungkin sekali atau dua kali dalam hidup saya ketika saya perlu menguji sesuatu. Oleh karena itu, saya tidak dapat berkomentar langsung tentang seberapa baik ini, tetapi sepertinya ini memberi pengembang tampilan yang lebih intuitif.

Secara umum, semua ini adalah bagian dari cerita tentang interaksi pengguna, ketika tugas pengembang dan desainer adalah mengidentifikasi cara terbaik untuk menyajikan data, dengan mempertimbangkan fakta bahwa mereka benar-benar dilihat oleh pengembang akhir, pihak ketiga yang akan menginstal semua alat dan modul ini. Karena ketika ada terlalu banyak informasi, kami biasanya mengklik atau melewatkannya tanpa membaca. Kebenaran ada di antara keduanya.

Adapun rencana masa depan pengembangan Python dan pip, saya tidak bisa berkomentar tentang mereka, mereka tidak diketahui oleh saya. Namun, saya pikir, atau lebih tepatnya, berharap bahwa seseorang telah mengirimkan permintaan untuk fungsi yang serupa sehingga penulis pip dapat mempertimbangkannya dalam rencana mereka. Sekarang tim pendukung sedikit lebih besar dari sebelumnya - sekitar tujuh orang dengan hak untuk menerima komitmen.

- Terima kasih, saya berharap bahwa seiring waktu, orang akan lebih memikirkan keamanan dan membangun lebih banyak pemeriksaan di ekosistem kita. Mari kita bicara sedikit tentang kinerja mendatang Anda di Moscow Python Conf ++. Itu dibangun di sekitar keamanan ketergantungan bawaan dan pengemasan.

Kami tidak akan merusak di sini, tetapi dari sudut pandang pakar keamanan, dari sudut pandang Anda, apa lagi yang harus dipertimbangkan pengembang saat memeriksa keamanan aplikasi?

Kami telah membahas cara mengamankan penanganan ketergantungan dan paket. Apa lagi yang perlu diperiksa oleh pengembang biasa? Apa yang harus saya cari?

Saya makan Das: Saya pikir salah satu poin utama adalah pembaruan. Pastikan bahwa Anda setidaknya telah memesan dengan ini, dan semua yang Anda andalkan diperbarui, termasuk OS, apakah itu Linux, Mac, Windows, atau bahkan iOS. Atau, pastikan Anda setidaknya membuat model proses untuk memahami apa lagi yang salah.

Masalah bagi pemula (dan ini telah terjadi pada saya) dalam banyak kasus adalah bahwa kami secara membabi buta mempercayai input pengguna. Anda perlu lebih sedikit mengandalkan fakta bahwa input memang benar dan bahwa ini tidak akan menyebabkan masalah lain. Semuanya perlu diperiksa ulang.

Selain itu, jika Anda membuka sesuatu, pastikan Anda tidak lupa untuk menutupnya.. Bayangkan sebuah pintu biasa: ketika kita memasuki kantor, kita memeriksa apakah kita lupa menutup pintu di belakang kita. Juga dalam pemrograman, ketika kita membuka file, soket, atau sesuatu yang lain, atau akses ke sesuatu, Anda perlu memastikan setelah selesai bahwa semuanya bersih dan tertutup.

Dari sudut pandang pemrograman, saya pikir ini adalah dua poin utama yang banyak orang lupa.

- Ya, ada banyak hal yang orang lupakan, dan sekarang, saya pikir, pertanyaan terakhir. Berdasarkan pengalaman pribadi Anda, kesalahan keamanan seperti apa yang paling sering dilakukan pengembang backend tingkat menengah Python? Input pengguna? Kecanduan? Kemasan aplikasi yang aman? Apa yang lebih umum?

Eaten Das: Masalah yang saya lihat terutama karena entri yang salah.

Pada 2011, saya mengembangkan alat untuk proyek Fedora dan lupa untuk membersihkan file sementara saya. Dalam kasus khusus ini, ini adalah dump, dan ketidakhadiran mereka di lingkungan baru menyebabkan masalah yang tidak terduga untuk infrastruktur - itu jatuh karena saya, dengan kata lain, kode buruk.

Ini adalah kelanjutan dari topik yang sama, ketika Anda perlu memastikan bahwa kode "dibersihkan" jika Anda membuat atau membuka sesuatu. Jadi itu pelajaran serius bagi saya. Ketika Anda berpikir, “Ya, saya berhasil! Semuanya berfungsi di laptop saya! ", Ini bukan fakta bahwa itu akan berfungsi dalam rilis atau produksi nyata.

Untuk beberapa alasan, kita sering berpikir bahwa lingkungan akan identik dengan lingkungan kita, tetapi itu tidak pernah terjadi. Bahkan perusahaan besar seringkali sulit menentukan lingkungan nyata di sisi klien. Penting untuk mengingatnya.

Dan selanjutnya -buat lebih banyak komentar pada kode Anda , tulis dokumentasi. Tip ini tidak hanya untuk pemula, tetapi juga untuk pengembang berpengalaman. Jika Anda belum melihat kode selama beberapa bulan atau beberapa tahun, maka bisa sangat sulit untuk memahami mengapa Anda pernah menulis sesuatu.

Kushal Das akan tampil di Moscow Python Conf ++ . Kami terpaksa menunda konferensi offline besar untuk musim gugur, tetapi pada 27 Maret kami mengadakan konferensi mini-online, materi yang akan segera kami bagikan, tetap berhubungan.

All Articles