Saturday 5 April 2014

Membangun Cryptographically Aman Aplikasi Cloud





1. Pengantar Masalah

       Crypton adalah sebuah proyek Open source yang disediakan oleh SpiderOak dengan tujuan pemecahan masalah privasi dan keamanan melalui aplikasi cloud. Sebelum memberitahu solusinya, Pertama kita harus membicarakan tentang seputar masalah ini. Masalah utama dengan aplikasi berbasis cloud adalah bahwa data pengguna disimpan di cluod sehingga dapat di akses dan di baca oleh siapapun yang memiliki akses ke server ( penyedia layanan) cloud (CSP). dan juga Belum lagi bahwa jika seorang Attacker mampu menembuspertahanan CSP, ia mungkin juga dapat mengakses data klien. That's being said, Crypton adalah suatu Framework  yang dapat digunakan untuk membangun aplikasi cloud cryptographically yang aman. yang berarti bahwa data klien disimpan dengan aman di cloud dalam bentuk terenkripsi dan hanya klien yang memiliki pengetahuan untuk mendekripsi data. Crypton melakukan kriptografi behind the scenes. sehingga para pengembang tidak perlu repot-repot untuk itu. Jika semua orang mencoba untuk menggunakan metode kriptografi mereka sendiri untuk menyediakan aplikasi berbasis cloud dengan nol pengetahuan, ada, pasti akan menjadi perbedaan, mungkin beberapa orang lebih rentan daripada yang lainnya, tetepai tidak akan cocok dengan profil yang sempurna.


2. Menyajikan Solusi

        Dengan Crypton, kita dapat membangun aplikasi berbasis cloud yang aman dimana semua enkripsi dan dekripsi data klien dilakukan pada sisi komunikasi klienn, sebelum data tersebut di kirim ke cloud, Hal ini menghasilkan data terenkripsi yang tersimpan pada cloud, Tergantung pada bagaimana aplikasi kita diprogram, semua data kita yang tersimpan di cloud dapat dienkripsi, Tentu saja itu tidak selalu diperlukan untuk mengenkripsi segala sesuatu, karena kadang-kadang mungkin lebih efisien untuk bekerja dengan data yang tidak terenkripsi. Hal ini karena beberapa data tidak begitu penting sehingga perlu di enkripsi segala, dan dengan tidak mengenkripsi itu , kita menyimpan beberapa siklus CPU, yang biasanya akan di habiskan oleh proses enkripsi dan dekripsi. Ada juga optimasi server-side lain yang dapat dilakukan pada data yang tidak terenkripsi yang tidak dapat dilakukan pada data ter-enkripsi, seperti mencari data melalui itu sendiri, Jika kita ingin melakukan pencarian sederhana atas data ter-enkripsi di cloud, semua data harus dikirim ke klien, dimana data itu di-dekripsi, setelah itu algoritma pencarian dapat melakukan tugasnya, Tapi itu mengakibatkan seluruh database yang perlu dikirim melalui bandwidth akan memakan jaringan sebelum satu pencarian melalui data dapt dilakukan,

Perhatikan. bahwa dokumentasi Crypton menyatakan bahwa crypton belum siap untuk lingkungan produksi [1], tapi mudah-mudahan kita akan menyebarkan berita ini di internet untuk menarik para pengembang yang bersedia untuk menguji dan mungkin berkontribusi untuk itu.


3. Iktisar Crypton Diary

       Mari sekarang kita lihat pada  Crypton Diary di contoh aplikasi, yang ditulis dengan kemanan dalam pikiran, Catatan Aplikasi menggunakan Crypton untuk meng-Enkripsi data pengguna dan dapat di akses pada Crypton Diary , yang disajikan pada gambar di bawah ini.




       Kita bisa melihat bahwa ada form input dimana kita dapat memasukkan username dan password kita, Ada juga tombol login, log kita ke dalam aplikasi, dan tombol register, yang memungkinkan untuk mendaftarkan account baru. Mari kita membuat akun baru pertama kalinya dengan memasukkan Crypton : Crypton ke bidang masukkan username dan password, Ketika menekan tombol register, kunci kriptografi akan secara otomatis dibuat dan kita akan login kedalam aplikasi, Pada gambar dibawah, kita bisa melihat aplikasi harian setelah log-in. Ada kotak input diman akita dapat memasukkan beberapa teks tentang kehidupan kita. untuk menyimpan pesan, kita dapat menekan tombol "Save" dan untuk menghapus pesan kita perlu menekan tombol "Delete".

 



Menu ini berisi dua tombol pilihan yaitu : "Entries" yang berisi daftar semua entri pesan yang disimpan, dan "Create" yang menciptakan entri pesan baru,“Hello, this is my first entry.” and save it. 



Setelah pesan telah disimpan, kita akan melihatnya jika kita klik pada tombol menu "Entries", yang akan menyajikan entri di dasarkan pada ketika kita telah saved them, maka Saat ini hanya ada satu pesan, yang disimpan 1 menit yang lalu.






Sekarang mari kita ciptakan entri kedua dengan teks : “Now I’ve gotten used to the Diary application and I’m wondering whether my messages are encrypted when saved to the cloud?” Seperti yang di tunjukan pada gambar di bawah ini: 


Sekarang ada dua pesan yang disajikan jika kita memasuki menu "Entries" lagi :



Ini adalah penggunaan dasar dari aplikasi, Jika anda telah mengikuti artikel dengan baik, Anda dapat melihat bahwa kita sudah bertanya-tanya apakah pesan akan disimpan dalam bentuk ter-Enkripsi. Ini adalah pertanyaan yang valid dan penting ba bahwasanya kita mencoba untuk mengatasinya dalam artikel ini. Hanya dari menggunakan aplikasi web normal, Kita tidak tahu jawaban untuk pertanyaan itu, Karena kita tidak memprogram aplikasi kita sendiri, agar kita semua tahu, pesan mungkin juga dapat disimpan dalam teks yang jelas. Ada pemeriksaan sederhan yang dapat kita gunakan untuk mengkonfirmasi apakah pesan aman: Kita bisa mulai mencegat proxy, Menangkap pesan-pesan yang dikirim ke server dan melihat diri kita sendiri, jika kita mulai wireshark, Kita tidak akan mendapatkan hasil yang berarti, karena pesan yang dikirim melalui HTTPS di-Dekripsi di Wireshark, mari kita mulai Burp intercepting proxy dan melihat pesan dalam teks-jelas, Gambar di bawah ini menyajikan permintaan yang dikirim ke server setelah menyimpan diary message: 

Perhatikan bahwa kita sedang dealing dengan permintaan POST ke https://diary.crypton.io/transaction/1528. request body berisi pesan JSON, yang menggambarkan satu transaksidengan bidang-bidang berikut : Type, containerNameHmac, and The payload Ciphertext berisi file versi di-enkripsi dari payload kami, yang menegaskan bahwa versi teks di-enkripsi sedang berada di cloud. Tentu saja ada cara dimana aplikasi masih dapat membaca cipher-text ter-enkripsi kami. Ketika kita terdaftar, Aplikasi bisa menyimpan password kita dalam clear-text dan menggunakan nya untuk men-dekrip pesan kami, Dalam artikel ini kita akan mencoba untuk mencari tahu apakah ini benar atau tidak, so bear with me here. 4. Getting Crypton Untuk mendapatkan Crypton, pertama-tama kita harus menginstal semua depensasi yang disebutkan di [1], Pada dasarnya kita perlu menginstal git revision control system, the postgresql database, and the node.js JavaScript library, Setelah semua depensasi telah berhasil di instal, kita bisa mengkloning repositori Crypton dari profil Github SpiderOak dan built it dengan (make). Perhatikan bahwa Crypton menggunakan Node.JS librari, karena kita perlu menyadari dari mereka, ketika kita mengembangkan aplikasi cryptographically yang aman dengan Crypton:

  • Karma - Tools yang memungkinkan kita untuk mengeksekusi JavaScript diweb browser. 
  • Mocha - Framework Tes JavaScript Sederhana. 
  • Mockery - Ini memungkinkan API Sederhana dan mudah untuk digunakan yang dapat kita Pergunakan. 
  • Should. 
  • Uglifi - A JavaScript parser and beautifier library. 
  • Bcrypt - Pelaksanaan algoritma enkripsi BCrypt. 
  • Comannder - ini menyediakan interface baris perintah. 
  • Redis - untuk klien ter-Koneksi ke database Redis NoSQL. 
  • Cors - Sebuah Library untuk memungkinkan cross - berbagi resource dalam aplikasi web. 
  • Ekspress - a Framework aplikasi web. 
  • Node - UUID - ini menghasilkan pengidentifikasi universal unik. 
  • Sinon - Framework tes. 
  • Colors - ini memberikan warna di konsol. 
  • Connect - Framework HTTP server. 
  • Cookies - Untuk manajemen cookie. 
  • Cryptojs - ini menyediakan berbagai algoritma kriptografi yang aman. 
  • Lusca - ini menyediakan keamanan aplikasi untuk meng-Ekspresikan. 
  • Client PG - a Postgre SQL.
  • Socket.IO - Socket ini menyediakan web API untuk aplikasi real-time. 

Kita juga harus menginstal Redis Server versi 2.6, yang bisa kita lakukan dengan perintah di bawah ini. Secara khusus menyebutkan perintah-perintah tersebut, karena jika tidak, anda akan berakhir dengan versi lama dari Redis. 

  1.  # sudo apt-get install -y python-software-properties
  2.  # sudo add-apt-repository -y ppa:rwky/redis
  3.  # sudo apt-get update
  4.  # sudo apt-get install -y redis-server

Sebelum meng-Kloning dan menginstal repository Crypton, Anda juga harus men-download versi terbaru dari Node.js dan menginstallnya. Kami sekarang tidak akan masuk ke langkah-langkah, karena ada di dokumntasi pada situs web [1]. Akhirnya, Kita harus mengkloning repositori Crypton dari Github dan enter the created direktori



  1. # git clone -b sharing https://github.com/SpiderOak/crypton/ crypton
  2. # cd crypton/

Setelah kita berada di direktory Crypton, pertama-tama kita harus menjalankan script "check_depencies.sh". yang memverifikasi bahwa setiap ketergantungan telah dipasang dengan benar. Setelah itu, kita hanya dapat menjalankannya, yang harus membaca Makefile di direktory dan menjalankan perintah tertulis di dalamnya. pada dasarnya, Makefile menjalankan command Make di client/server/and integration_tests/directories, yangmengandung Makefiles, Perhatikan bahwa saya tidak pernah berhasil built Crypton dengan menjelaskan dan membuat di dalam basis direktory, I had to enter server/client/directories dan menjalankan perintah make secara manual di masing-masing. Dalam direktori server, kita juga harus menjalankan perintah "sudo npm link" untuk membuat sistem link simbolik yang tepat sehingga Crypton dieksekusi dalam PATH dan dapat dijalankan dari mana saja. Pada sistem Ubuntu. /usr/local/bin/Crypton symlink dibuat. Dalam direktori klien, kita juga harus menjalankan command make - jika Anda menerima error seperti berikut, itu berarti bahwa, karma tidak dapat ditemukan.



  1. # make
  2. cat src/core.js src/account.js src/session.js src/container.js src/transaction.js src/peer.js src/message.js src/diff.js src/vendor/*.js > dist/crypton.js
  3. make: ./node_modules/.bin/karma: Command not found
  4. make: *** [test-unit] Error 127
Untuk mengatasi kesalahan kita perlu menginstal karma manually dengan menginstal NPM dan link ke binary executable dengan perintah di bawah ini.






  1. # cd client/
  2. # npm install karma
  3. # cd node_modules/.bin/
  4. # ln -sf ../karma/bin/karma .
  5. # cd -
  6. # make
Pada artikel ini, kita akan menyajikan contoh Diary, for which we need to enter the client/examples/diary/ directory and start Crypton. Karena will start a web server listening on privileged port 443, we need to invoke it with sudo privileges. Di bawah ini, kita dapat melihat bahwa server HTTPS berhasil dimulai and Listening pada port 443:













  1. # sudo crypton
  2. [info] loading config
  3. [info] config file not specified, using example
  4. [info] loading datastore
  5. [debug] listening for container updates
  6. [info] configuring server
  7. connect.limit() will be removed in connect 3.0
  8. connect.multipart() will be removed in connect 3.0
  9. visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
  10. connect.limit() will be removed in connect 3.0
  11. [info] loading routes
  12. [info] starting HTTPS server
  13. [info] HTTPS server listening on port 443
  14. [info] starting socket.io
  15. [info]  - socket.io started
Setelah itu, kita dapat mengunjungi halaman web, di mana aplikasi Crypton Diary sekarang berjalan. Kita bisa melihat seperti di bawah ini:




1. Crypton Diary Internals 

    Pada bagian sebelumnya, kita melihat bagaimana untuk mendapatkan Crypton dan bagaimana menjalankan aplikasi Crypton Diary. Sekarang kita akan melihat apa yang terjadi di balik tirai untuk melihat bagaimana informasi yang disimpan pada sisi server. Mari kita pertama melihat bagaimana database Redis digunakan. Kita dapat terhubung ke database dengan Redis-cli command dan enter arbitrary Redis commands. Kita dapat mengeksekusi "keys *" untuk menampilkan semua kunci saat ini disimpan dalam database. Sebelum benar-benar menghubungkan ke Harian Crypton dengan web browser kita, tidak akan ada kunci disimpan dalam database Redis, seperti dapat dilihat di bawah ini:




  1. # redis-cli
  2. 127.0.0.1:6379> keys *
  3. (empty list or set)

        Setelah kita masukkan alamat web Crypton Diary dalam browser web dan terhubung ke situs web, kunci baru untuk sesi kami dibuat. Kunci sesi kami di bawah ini adalah "crypton.sid:to3U1feDnhB5tr1kwXhXxQVq". Pertama mget command menampilkan nilai kunci sesi sebelum kita telah dikonfirmasi untuk aplikasi Diary dan kedua mget command menampilkan nilai kunci sesi setelah otentikasi sukses. Perhatikan bahwa ketika kita telah dikonfirmasi untuk aplikasi web, sebuah AccountId is added to the JSON value stored in our session key; this binds our account to the session key. 


  1. 127.0.0.1:6379> keys *
  2. 1) "crypton.sid:to3U1feDnhB5tr1kwXhXxQVq"
  3.     127.0.0.1:6379> mget "crypton.sid:to3U1feDnhB5tr1kwXhXxQVq"
  4. 1) "{"cookie":{"originalMaxAge":null,"expires":null,"secure":true,"httpOnly":true,"path":"/"}}"
  5.     127.0.0.1:6379> mget "crypton.sid:to3U1feDnhB5tr1kwXhXxQVq"
  6. 1) "{"cookie":{"originalMaxAge":null,"expires":null,"secure":true,"httpOnly":true,"path":"/"},"accountId":15}"

     Jika kita menyimpan entri dalam database, isi Redis DB tidak akan berubah, karena data yang sebenarnya disimpan dalam database PostgreSQL. Ketika kita berpikir tentang hal ini, masuk akal untuk menyimpan data sesi hanya di Redis DB, karena isi dari database Redis tidak bertahan pada restart, karena mereka disimpan dalam memori hanya-dan itu akan menjadi malu jika entri Harian kami hilang karena kita disimpan dalam database Redis, yang dihapuskan setelah service restart. Oleh karena itu, semua data harus disimpan pada hard drive yang sebenarnya dalam database PostgreSQL. 

       Kita juga dapat terhubung ke database PostgreSQL dengan menggunakan psql command. Ingat bahwa, secara default, pengguna PostgreSQL di Ubuntu memiliki password default kosong, sehingga kita harus dapat terhubung ke DB tanpa memasukkan password. Pada output di bawah ini, kami telah terhubung dengan database crypton_test PostgreSQL dan ditampilkan semua tabel dengan perintah dt.


  1. # sudo -u postgres psql
  2.     postgres=# connect crypton_test
  3. crypton_test=# dt
  4. public | account                               | table | crypton_test_user
  5. public | base_keyring                          | table | crypton_test_user
  6. public | container                             | table | crypton_test_user
  7. public | container_record                      | table | crypton_test_user
  8. public | container_session_key                 | table | crypton_test_user
  9. public | container_session_key_share           | table | crypton_test_user
  10. public | message                               | table | crypton_test_user
  11. public | transaction                           | table | crypton_test_user
  12. public | transaction_add_container             | table | crypton_test_user
  13. public | transaction_add_container_record      | table | crypton_test_user
  14. public | transaction_add_container_session_key | table | crypton_test_user
  15. public | transaction_add_container_session_key_share    | table | crypton_test_user
  16. public | transaction_add_message               | table | crypton_test_user
  17. public | transaction_delete_container          | table | crypton_test_user
  18. public | transaction_delete_container_session_key_share | table | crypton_test_user
  19. public | transaction_delete_message            | table | crypton_test_user

Mari kita membuat pengguna lain dengan registering temp:temp user. Pengguna harus disimpan dalam rekening tabel, yang berisi informasi berikut setelah terciptanya pengguna baru. Perhatikan tidak ada password disimpan di mana saja, dan tidak ada hash password yang tersimpan.


  1. crypton_test=# select * from account;
  2.  account_id |       creation_time        | username | base_keyring_id | deletion_time
  3. ------------+----------------------------+----------+-----------------+---------------
  4.           1 | 2014-03-17 12:41:15.118183 | pizza    |               2 |
  5.           4 | 2014-03-17 12:41:17.473174 | testuser |               5 |
  6.          17 | 2014-03-17 12:54:25.929092 | temp     |              18 |

         Kita juga dapat mencari melalui database PostgreSQL dan kita tidak akan dapat menemukan pesan yang disimpan masuk melalui aplikasi Diary dalam bentuk teks-jelas, semuanya dienkripsi sebagaimana mestinya, yang memberi kami konfirmasi kami sudah mencari . 

Kami juga telah menyebutkan bahwa Crypton masih memiliki jalan panjang , karena itu memang proyek baru. Satu masalah terjadi jika kita masukkan "admin) ', nname:" sebagai username. Pada titik seperti ini, "log in" pesan ditampilkan pada layar tanpa batas. Setelah beberapa saat. pengguna mungkin menyadari bahwa aplikasi telah berhenti kerja dan menutup tab browser.




Jika kita melihat pesan-pesan yang masuk di latar belakang kita dapat melihat permintaan berikut, di mana itu jelas bahwa permintaan kembali 404 Tidak Ditemukan pesan. Hal ini karena setiap backslash'' karakter berubah menjadi sebuah garis miring '/' karakter normal, sehingga mengubah struktur URL. Hal yang sama terjadi jika kita input slash normal, yang tidak berubah, tapi masih mengubah format URL.


  1. info 404 POST /account/admin)',/nname:
Aplikasi ini menerima bahwa setelah / rekening / situlah muncul nama pengguna diikuti dengan garis miring opsional, tetapi dalam kasus kami kami benar-benar menambahkan elemen lain dari URL, yang aplikasi tidak mengenali. Dalam kasus ini digunakan, aplikasi harus memberitahu kita bahwa kita harus menggunakan karakter khusus ketika memasukkan nama pengguna, jika karakter khusus memang tidak valid. Dalam hal permohonan ingin memungkinkan karakter khusus sebagai bagian dari username, mereka harus dikodekan dengan benar. 


Kesimpulan

        Kita telah melihat bahwa Crypton adalah sebuah proyek besar yang dapat menangani masalah keamanan bagi kita ketika membangun aplikasi cloud, karena secara otomatis mengenkripsi / mendekripsi pesan bagi kita, sehingga kita dapat menyimpannya di cloud tanpa mengungkapkan informasi apapun kepada CSP . Pada titik ini, saya ingin mengucapkan terima kasih kepada SpiderOak untuk merilis sebuah proyek yang besar untuk open source, dan semua pengembang saat ini untuk melakukan pekerjaan yang baik.

Crypton masih memiliki jalan panjang untuk lebih maju, sehingga setiap bantuan dari pengembang lain di seluruh dunia dihargai dan akan diterima dengan senang hati. Kita perlu berusaha menuju masa depan yang lebih aman, dimana data kami akan lebih aman dan pribadi yang tersimpan di cloud yang dienkripsi dan Crypton adalah salah satu cara untuk mencapainya.
 

sumber  referensi

No comments:

Post a Comment