Cara membangun perlindungan penipuan perusahaan Kuliah di YaC 2018

Pada 29 Mei, Konferensi 2018 diadakan lagi - konferensi Yandex tahunan dan terbesar. Ada tiga bagian di YaC tahun ini: teknologi pemasaran, kota pintar, dan keamanan informasi. Dalam pengejaran, kami menerbitkan salah satu laporan utama dari bagian ketiga - dari Yuri Leonovich tracer0tong dari perusahaan Jepang Rakuten.


Bagaimana cara kami mengautentikasi? Dalam kasus kami, tidak ada yang luar biasa, tetapi saya ingin menyebutkan satu metode. Selain jenis tradisional - captcha dan kata sandi satu kali - kami menggunakan Proof of Work, PoW. Tidak, kami tidak menambang bitcoin di komputer pengguna. Kami menggunakan PoW untuk memperlambat penyerang dan kadang-kadang bahkan memblokir sepenuhnya, memaksanya untuk menyelesaikan tugas yang sangat sulit, yang akan menghabiskan banyak waktu.

- Saya bekerja untuk Rakuten International Corporation. Saya ingin berbicara tentang beberapa hal: sedikit tentang diri saya, tentang perusahaan kami, tentang cara mengevaluasi biaya serangan dan memahami apakah Anda perlu melakukan pencegahan penipuan sama sekali. Saya ingin memberi tahu Anda bagaimana kami mengumpulkan pencegahan penipuan kami dan model mana yang kami gunakan memberikan hasil yang baik dalam praktiknya, bagaimana mereka bekerja dan apa yang dapat dilakukan untuk mencegah serangan penipuan.



Tentang diriku sendiri sebentar. Dia bekerja di Yandex, terlibat dalam keamanan aplikasi web, dan di Yandex dia juga pernah membuat sistem untuk mencegah serangan penipuan. Saya dapat mengembangkan layanan terdistribusi, saya memiliki sedikit latar belakang matematika yang membantu dalam penggunaan pembelajaran mesin dalam prakteknya.

Rakuten tidak terlalu dikenal di Federasi Rusia, tapi saya pikir Anda semua tahu itu karena dua alasan. Dari lebih dari 70 layanan kami di Rusia, Rakuten Viber dikenal, dan jika ada penggemar sepak bola di sini, Anda mungkin tahu bahwa perusahaan kami adalah sponsor umum klub sepakbola Barcelona.

Karena kami memiliki begitu banyak layanan, kami memiliki sistem pembayaran kami sendiri, kartu kredit kami sendiri, dan banyak program hadiah, kami terus-menerus mengalami serangan oleh penjahat cyber. Dan tentu saja, kami selalu memiliki permintaan dari bisnis untuk sistem perlindungan penipuan.

Ketika sebuah bisnis meminta kami untuk membuat sistem perlindungan penipuan, kami selalu menghadapi beberapa dilema. Di satu sisi, ada permintaan bahwa harus ada tingkat konversi yang tinggi, sehingga pengguna dapat dengan mudah melakukan otentikasi dengan layanan dan melakukan pembelian. Dan di pihak kami, di pihak penjaga keamanan, saya ingin lebih sedikit keluhan, lebih sedikit akun yang diretas. Dan kami, untuk bagian kami, ingin membuat harga serangan tinggi.

Jika Anda akan membeli sistem pencegahan penipuan atau mencoba melakukannya sendiri, Anda harus terlebih dahulu mengevaluasi biayanya.



Menurut pendapat kami, apakah kami membutuhkan pencegahan penipuan? Kami mengandalkan fakta bahwa kami memiliki beberapa jenis kerugian finansial akibat penipuan. Ini adalah kerugian langsung - uang yang akan Anda kembalikan kepada pelanggan Anda jika mereka dicuri oleh penyusup. Ini adalah biaya layanan dukungan teknis yang akan berkomunikasi dengan pengguna dan menyelesaikan konflik. Ini adalah pengembalian barang yang sering dikirim ke alamat palsu. Dan ada biaya langsung untuk mengembangkan sistem. Jika Anda membuat sistem perlindungan terhadap penipuan, yang digunakan pada beberapa server, Anda akan membayar infrastruktur, untuk pengembangan perangkat lunak. Dan ada aspek ketiga yang sangat penting dari kerusakan dari penyerang - kehilangan keuntungan. Terdiri dari beberapa komponen.

Menurut perhitungan kami, ada parameter yang sangat penting - nilai seumur hidup, LTV, yaitu, uang yang dihabiskan pengguna dalam layanan kami berkurang secara signifikan. Karena dalam setengah kasus penipuan, pengguna cukup meninggalkan layanan Anda dan tidak kembali.

Kami juga membayar uang untuk iklan, dan jika pengguna pergi, mereka hilang. Ini adalah biaya perolehan pelanggan, CAC. Dan jika kami memiliki banyak pengguna otomatis yang bukan orang sungguhan - kami memiliki pengguna aktif bulanan palsu, angka MAU, yang juga memengaruhi bisnis.

Mari kita lihat dari sisi lain, dari para penyerang.

Beberapa pembicara mengatakan bahwa penyerang secara aktif menggunakan botnet. Tetapi tidak peduli metode apa yang mereka gunakan, mereka masih perlu menginvestasikan uang, membayar serangan, mereka juga menghabiskan sejumlah uang. Tugas kita, ketika kita menciptakan sistem pencegahan penipuan, adalah untuk menemukan keseimbangan sehingga penyerang menghabiskan terlalu banyak uang, dan kita menghabiskan lebih sedikit. Ini membuat serangan terhadap kami tidak menguntungkan, dan penyerang pergi begitu saja untuk menghancurkan layanan lain.



Untuk layanan kerusakan kami, kami membagi serangan menjadi empat jenis. Ini ditargetkan ketika mencoba meretas satu akun, satu akun. Serangan oleh satu pengguna atau sekelompok kecil orang. Atau serangan yang lebih berbahaya bagi kita, masif dan tidak ditargetkan, ketika penyerang menyerang banyak akun, kartu kredit, nomor telepon, dll.



Saya akan memberi tahu Anda apa yang terjadi, bagaimana mereka menyerang kami. Jenis serangan paling jelas yang diketahui semua orang adalah peretas kata sandi. Dalam kasus kami, penyerang berusaha memilah nomor telepon, mencoba memvalidasi nomor kartu kredit. Ada beberapa variasi.

Registrasi akun secara massal, bagi kami jelas berbahaya. Saya akan memberi contoh nanti.

Apa yang dicatat? Akun palsu, beberapa produk yang tidak ada, sedang mencoba melakukan spam dalam pesan umpan balik. Saya pikir ini relevan dan serupa untuk banyak perusahaan komersial.

Masih ada masalah yang tidak jelas untuk e-commerce, tetapi jelas bagi Yandex - serangan terhadap anggaran iklan, penipuan klik. Ya, atau hanya pencurian data pribadi.



Saya akan memberi contoh. Kami memiliki serangan yang agak menarik pada layanan yang menjual buku elektronik, ada peluang bagi pengguna untuk mendaftar dan mulai menjual karya elektronik mereka, kesempatan seperti itu untuk mendukung penulis pemula.

Penyerang mendaftarkan satu akun master legal, dan beberapa ribu akun antek palsu. Dan dia membuat buku palsu, hanya dari kalimat acak, tidak ada artinya di dalamnya. Dia menaruhnya di pasar, dan kami memiliki perusahaan pemasaran, masing-masing antek, dengan syarat, 1 dolar, yang bisa dia pakai untuk membeli buku. Dan buku palsu ini harganya $ 1.

Serangan antek-antek terorganisir - akun palsu. Mereka semua membeli buku ini, buku yang naik peringkat, menjadi buku terlaris, penyerang menaikkan harga menjadi $ 10 bersyarat. Dan karena buku itu menjadi buku terlaris, orang-orang awam mulai membelinya, dan kami mengeluh bahwa kami menjual beberapa barang berkualitas rendah, sebuah buku dengan serangkaian kata-kata yang tidak berarti di dalamnya. Penyerang menerima untung.

Tidak ada titik kesembilan, ia kemudian ditangkap oleh polisi. Jadi, keuntungan tidak pergi untuk masa depan.

Tujuan utama dari semua penyerang dalam kasus kami adalah menghabiskan sesedikit mungkin uang mereka dan mengambil sebanyak mungkin uang kami.



Ada penyerang, satu orang yang hanya berusaha menghindari logika bisnis. Tetapi saya perhatikan bahwa kami tidak menganggap serangan semacam itu sebagai prioritas, karena dalam hal rasio jumlah akun yang diretas dan uang curian, mereka membawa risiko yang rendah bagi kami. Tetapi masalah utama bagi kami adalah botnet.



Ini adalah sistem terdistribusi besar, mereka menyerang layanan kami dari seluruh planet ini, dari berbagai benua, tetapi mereka memiliki beberapa fitur yang membuatnya lebih mudah untuk menghadapinya. Seperti pada sistem terdistribusi besar, node botnet melakukan tugas yang kurang lebih sama.

Hal penting lainnya - sekarang, seperti yang dicatat oleh banyak rekan kerja, botnet didistribusikan pada semua jenis perangkat pintar, router rumah, speaker pintar, dll. Tetapi perangkat ini memiliki spesifikasi perangkat keras yang rendah dan tidak dapat menjalankan skrip yang rumit.

Di sisi lain, bagi penyerang, menyewa botnet untuk DDoS sederhana cukup murah, dan juga diperlukan untuk mencari kata sandi untuk akun. Tetapi jika Anda perlu menerapkan semacam logika bisnis khusus untuk aplikasi atau layanan Anda, pengembangan dan dukungan botnet menjadi sangat mahal. Biasanya, seorang penyerang hanya menyewakan bagian dari botnet yang sudah jadi.

Saya selalu mengaitkan serangan botnet dengan parade Pikachu di Yokohama. Kami memiliki 95% lalu lintas berbahaya yang berasal dari botnet.



Jika Anda melihat tangkapan layar sistem pemantauan kami, Anda akan melihat banyak bintik kuning - ini adalah permintaan yang diblokir dari berbagai node. Dan di sini, orang yang penuh perhatian mungkin memperhatikan bahwa saya agak berkata bahwa serangan itu didistribusikan secara merata di seluruh dunia. Tapi ada anomali yang jelas pada peta, titik merah di area Taiwan. Ini adalah kasus yang cukup aneh.



Serangan ini datang dari router rumah. Di Taiwan, penyedia layanan Internet utama diretas, yang menyediakan Internet untuk sebagian besar penduduk pulau itu. Dan bagi kami itu adalah masalah yang sangat besar, terhubung dengan fakta bahwa banyak pengguna hukum pada saat yang sama ketika serangan itu terjadi, pergi dari alamat IP yang sama dan bekerja dengan layanan kami. Kami berhasil menghentikan serangan ini, tetapi itu sangat sulit.

Jika kita berbicara tentang ruang lingkup, tentang permukaan, tentang apa yang kita lindungi. Jika Anda memiliki situs web e-commerce kecil atau layanan regional kecil, Anda tidak memiliki masalah tertentu. Anda memiliki server, mungkin beberapa, atau mesin virtual di cloud. Baik, pengguna, buruk, baik, yang mendatangi Anda. Tidak ada masalah khusus untuk dilindungi.



Dalam kasus kami, semuanya lebih rumit, permukaan serangan sangat besar. Kami memiliki layanan yang digunakan di pusat data kami sendiri, di Eropa, di Asia Tenggara, di Amerika Serikat. Kami juga memiliki pengguna di berbagai benua, baik dan buruk. Plus, beberapa layanan dikerahkan dalam infrastruktur cloud, dan bukan milik kami.

Dengan begitu banyak layanan dan infrastruktur yang begitu luas, sangat sulit untuk dipertahankan. Plus, banyak layanan kami mendukung berbagai jenis aplikasi dan antarmuka klien. Misalnya, kami memiliki layanan TV Rakuten yang berfungsi pada TV pintar, dan perlindungannya sangat spesial untuk itu.



Untuk meringkas masalah, sejumlah besar pengguna beredar di sistem Anda, seperti orang-orang di toko di persimpangan di Shibuya. Dan di antara banyak orang ini, perlu untuk mengidentifikasi dan menangkap para penyerang. Pada saat yang sama, ada banyak pintu di toko Anda, dan bahkan ada lebih banyak orang.

Jadi, dari apa dan bagaimana kita merakit sistem kita?



Kami berhasil menggunakan hanya komponen open source, itu cukup murah. Menggunakan kekuatan banyak "pedagang keliling." Sebagian besar perangkat lunak ditulis dalam bahasa Golang. Antrian dan database pesan yang digunakan. Mengapa kami membutuhkan ini? Kami memiliki dua tujuan: mengumpulkan data tentang perilaku pengguna dan menghitung reputasi, mengambil beberapa tindakan untuk mengenali apakah pengguna itu baik atau buruk.



Kami memiliki banyak level dalam sistem, kami menggunakan frontends yang ditulis dalam Golang, dan Tarantool sebagai basis caching. Sistem kami digunakan di semua wilayah tempat bisnis kami berada. Kami mengirimkan acara melalui bus data, dan dari situ kami mendapatkan reputasi.



Kami memiliki backend yang juga mereplikasi status reputasi pengguna dengan Cassandra.

Bus data, bukan rahasia, Apache Kafka.



Acara dan log di satu arah, reputasi di sisi lain.

Dan tentu saja, sistem memiliki otak yang berpikir apakah pengguna itu buruk atau baik, aktivitas buruk atau baik. Otak dibangun di atas Apache Storm, dan bagian yang menyenangkan adalah apa yang terjadi di dalamnya.

Tapi pertama-tama, saya akan memberi tahu Anda cara kami mengumpulkan data dan cara memblokir penyusup.



Ada banyak pendekatan. Beberapa dari mereka sudah disebutkan oleh rekan-rekan dari Yandex dalam laporan pertama mereka. Bagaimana cara memblokir penyusup? Anton Karpov berkata bahwa firewall itu buruk, kami tidak menyukainya. Memang, dimungkinkan untuk memblokir berdasarkan alamat IP, topik untuk Rusia sangat relevan, tetapi metode ini tidak cocok untuk kita sama sekali. Kami lebih suka menggunakan kunci tingkat yang lebih tinggi, di tingkat ketujuh, di tingkat aplikasi, menggunakan otentikasi permintaan menggunakan token, cookie sesi.

Mengapa Mari kita lihat kunci rendah dulu.



Ini adalah cara yang murah, semua orang tahu cara menggunakannya, semua orang memiliki firewall di server. Banyak instruksi di Internet, tidak ada masalah memblokir pengguna dengan IP. Tetapi ketika Anda memblokir pengguna pada level rendah, ia tidak memiliki cara untuk mem-bypass sistem perlindungan Anda jika ini adalah false positive. Peramban modern kurang lebih berusaha menunjukkan beberapa pesan kesalahan yang indah kepada pengguna, tetapi tetap saja, seseorang tidak dapat mem-bypass sistem Anda dengan cara apa pun, karena pengguna biasa tidak dapat mengubah alamat IP mereka secara sewenang-wenang. Karena itu, kami percaya bahwa metode ini tidak terlalu baik dan tidak ramah. Dan ditambah IPv6 bergerak di sekitar planet ini, jika Anda memiliki tabel yang diblokir, maka setelah beberapa waktu akan membutuhkan waktu yang sangat lama untuk mencari alamat pada tabel tersebut, dan tidak ada masa depan untuk kunci tersebut.



Metode kami adalah kunci di tingkat atas. Kami lebih memilih untuk mengotentikasi permintaan, karena bagi kami ini adalah kesempatan untuk beradaptasi dengan sangat fleksibel terhadap logika bisnis aplikasi kami. Metode semacam itu memiliki kelebihan dan kekurangan. Kerugiannya adalah biaya pengembangan yang tinggi, jumlah besar sumber daya yang harus Anda investasikan dalam infrastruktur, dan arsitektur sistem seperti itu, dengan segala kesederhanaannya yang jelas, masih rumit.

Anda telah mendengar dalam laporan sebelumnya tentang berbagai metode berdasarkan biometrik, pengumpulan data. Tentu saja, kami juga memikirkan hal ini, tetapi di sini sangat mudah untuk melanggar privasi pengguna dengan mengumpulkan data yang salah yang ingin dipercayakan oleh pengguna kepada Anda.



Bagaimana cara kami mengautentikasi? Dalam kasus kami, tidak ada yang luar biasa, tetapi saya ingin menyebutkan satu metode. Selain jenis tradisional - captcha dan kata sandi satu kali - kami menggunakan Proof of Work, PoW. Tidak, kami tidak menambang bitcoin di komputer pengguna. Kami menggunakan PoW untuk memperlambat penyerang dan kadang-kadang bahkan memblokir sepenuhnya, memaksanya untuk menyelesaikan tugas yang sangat sulit, yang akan menghabiskan banyak waktu.



Bagaimana cara kami mengumpulkan data? Kami menggunakan alamat IP sebagai salah satu fitur, juga salah satu sumber data bagi kami adalah protokol enkripsi yang didukung oleh klien, dan waktu penyiapan koneksi. Juga, data yang kami kumpulkan dari browser pengguna, fitur-fitur dari browser ini, dan token yang kami gunakan untuk mengotentikasi permintaan.

Bagaimana cara mendeteksi penyusup? Anda mungkin mengharapkan saya mengatakan bahwa kami membangun jaringan saraf besar dan segera menangkap semua orang. Tidak juga. Kami menggunakan pendekatan multi-level. Ini disebabkan oleh kenyataan bahwa kami memiliki banyak layanan, volume lalu lintas yang sangat besar, dan jika Anda mencoba untuk menempatkan sistem komputasi yang rumit pada volume lalu lintas seperti itu, kemungkinan besar itu akan sangat mahal dan akan memperlambat layanan. Oleh karena itu, kami mulai dengan metode dangkal yang sederhana: kami mulai menghitung berapa banyak permintaan datang dari alamat yang berbeda, dari browser yang berbeda.



Metode ini sangat primitif, tetapi memungkinkan Anda untuk menyaring serangan masif bodoh seperti DDoS, ketika Anda telah menyatakan anomali muncul di lalu lintas. Dalam hal ini, Anda benar-benar yakin bahwa ini adalah penyerang, dan Anda dapat memblokirnya. Tetapi metode ini hanya cocok pada level awal, karena hanya mencegah serangan paling kasar.



Setelah itu, kami sampai pada metode selanjutnya. Kami memutuskan untuk fokus pada kenyataan bahwa kami memiliki logika bisnis aplikasi, dan penyerang tidak akan pernah bisa datang ke layanan Anda dan mencuri uang. Jika dia tidak memecahkannya, tentu saja. Dalam kasus kami, jika Anda melihat skema yang paling disederhanakan dari beberapa pasar abstrak, kita akan melihat bahwa pengguna harus masuk terlebih dahulu, memberikan kredensial, menerima cookie sesi, lalu pergi ke pasar, mencari barang di sana, memasukkannya ke keranjang. Setelah itu, ia melanjutkan untuk membayar pembelian, memilih alamat, metode pembayaran, dan pada akhirnya ia mengklik "bayar", dan akhirnya pembelian barang terjadi.

Anda lihat, seorang penyerang harus mengambil banyak langkah. Dan transisi antar negara bagian ini, antara layanan yang menyerupai satu model matematika - ini adalah rantai Markov, yang juga dapat digunakan di sini. Pada prinsipnya, dalam kasus kami mereka menunjukkan hasil yang sangat baik.



Saya bisa memberikan contoh yang disederhanakan. Secara kasar, ada saat ketika pengguna mengotentikasi, ketika ia memilih pembelian dan melakukan pembayaran, dan misalnya, sudah jelas bagaimana penyerang dapat berperilaku tidak normal, ia dapat mencoba masuk beberapa kali dengan akun yang berbeda. Atau dia dapat menambahkan produk yang salah ke keranjang yang dibeli pengguna biasa. Atau melakukan sejumlah besar tindakan abnormal.

Rantai Markov biasanya mempertimbangkan status. Kami juga memutuskan untuk menambahkan waktu ke negara-negara ini untuk diri kami sendiri. Penyerang dan pengguna normal berperilaku sangat berbeda dalam waktu, dan ini juga membantu memisahkan mereka.

Rantai Markov adalah model matematika yang cukup sederhana, mereka sangat mudah untuk dihitung dengan cepat, sehingga memungkinkan Anda untuk menambah tingkat perlindungan, menyingkirkan bagian lain dari lalu lintas.

Tahap selanjutnya. Kami menangkap penyerang bodoh, menangkap penyerang pikiran jahat. Sekarang yang paling cerdas adalah yang tersisa. Untuk penyerang yang rumit, diperlukan fitur tambahan. Apa yang bisa kita lakukan



Kami dapat mengumpulkan beberapa sidik jari dari browser. Sekarang browser adalah sistem yang cukup kompleks, mereka memiliki banyak fitur yang didukung, mereka menjalankan JS, mereka memiliki berbagai kemampuan tingkat rendah, dan semua ini dapat dikumpulkan, semua data ini. Pada slide adalah contoh dari output dari salah satu perpustakaan open source.

Plus, Anda dapat mengumpulkan data tentang bagaimana pengguna berinteraksi dengan layanan Anda, bagaimana dia menggerakkan mouse, bagaimana dia menyentuh pada perangkat seluler, bagaimana dia menggulir layar. Hal-hal seperti itu dikumpulkan, misalnya, oleh Yandex.Metrica. , , .



, . ? , , , , . , . machine learning, decision tree, . Decision tree if-else, , . , . - , - — , , .



, , , - , , , Softbank, . , , . - , , , .

, , iTunes — , - , .

, , , .



. , ? , . , , , . , .

. , . . : . , .

Source: https://habr.com/ru/post/id413059/


All Articles