Thursday, January 5, 2023

Praktikum 15 - Threat Modeling

 Threat Modeling



Secure Software Development Life Cycle (SSDLC)

Microsoft Threat Modeling Tool

Alat Pemodelan Ancaman Microsoft memudahkan pemodelan ancaman untuk semua pengembang melalui notasi standar untuk memvisualisasikan komponen sistem, aliran data, dan batasan keamanan. Ini juga membantu pemodel ancaman mengidentifikasi kelas ancaman yang harus mereka pertimbangkan berdasarkan struktur desain perangkat lunak mereka. Kami merancang alat ini dengan mempertimbangkan pakar non-keamanan, membuat pemodelan ancaman menjadi lebih mudah bagi semua pengembang dengan memberikan panduan yang jelas tentang cara membuat dan menganalisis model ancaman. 

Business Threats
  • Merupakan ancaman terhadap fungsi bisnis yang mendasari dan mungkin tidak mudah terlihat
  • Business threats: ancaman terhadap fungsi bisnis yang dapat menyebabkan gangguan atau kerusakan pada fungsi bisnis atau proses dan sumber daya pendukung bisnis.
  • Contoh: fungsi penggajian di sebagian besar bisnis. Jika aplikasi absensi karyawan tidak tersedia untuk melaporkan jumlah jam kerja karyawan, maka fungsi penggajian mungkin terpengaruh karena tidak ada dasar untuk mengukur berapa jam setiap karyawan telah bekerja.

System Threats
  • System threats adalah ancaman langsung terhadap aplikasi atau salah satu subsistemnya.
  • Biasanya lebih banyak ancaman langsung yang ditujukan pada aplikasi perangkat lunak atau platform tempat aplikasi tersebut digunakan.
  • Threats ini biasanya lebih mudah untuk dikenali selama usaha pengembangan perangkat lunak.
  • Contoh: Simple data entry errors pada sistem absensi karyawan. Jika jumlah jam kerja yang diinputkan untuk seorang pegawai tidak benar, maka akan menyebabkan pegawai tersebut kurang bayar atau lebih bayar.
Kategori System Threats

Human threats
  • Threats berdasarkan perilaku atau kebiasaan individual. Dapat berasal dari dalam maupun luar organisasi.
  • Contoh: rasa ingin tahu, kesalahan input data dan kelalaian, kegiatan mata- mata, penipuan, pembuangan informasi sensitive yang tidak tepat, Tindakan Tidak Sengaja atau Kecerobohan, Keliru Identitas, pelanggaran aturan kebijakan, Shoulder Surfing, pencurian atau vandalisme.
Technical threats
  • Merepresentasikan ancaman terhadap sistem berdasarkan dari perilaku sistem.
  • Contoh: Mengompromikan Emanasi, corruption by system failures, data contamination, eavesdropping (menguping), Kegagalan dan Gangguan Tidak Dicatat dengan Benar, installation errors, intrusion, malicious code, misrepresentation of identity, penyalahgunaan kelemahan yang diketahui, Kejenuhan Sumber Daya (DoS, DDoS), Pengambilalihan Sesi Resmi, Tampering
Spoofing
Spoofing adalah istilah luas untuk jenis perilaku yang melibatkan penjahat dunia maya yang menyamar sebagai entitas atau perangkat tepercaya untuk membuat Anda melakukan sesuatu yang bermanfaat bagi peretas — dan merugikan Anda. Setiap kali scammer online menyamarkan identitas mereka sebagai sesuatu yang lain, itu adalah spoofing.

Tampering
Tampering terjadi ketika data atau informasi diubah tanpa otorisasi. Cara aktor jahat dapat melakukan perusakan dapat dilakukan dengan mengubah file konfigurasi untuk mendapatkan kontrol sistem, memasukkan file berbahaya, atau menghapus/memodifikasi file log.

Repudiation
Serangan penolakan terjadi ketika aplikasi atau sistem tidak mengadopsi kontrol untuk melacak dan mencatat tindakan pengguna dengan benar, sehingga memungkinkan manipulasi berbahaya atau memalsukan identifikasi tindakan baru. Serangan ini dapat digunakan untuk mengubah informasi pembuatan tindakan yang dilakukan oleh pengguna jahat untuk mencatat data yang salah ke file log. Penggunaannya dapat diperluas ke manipulasi data umum atas nama orang lain, dengan cara yang sama seperti memalsukan pesan email. Jika serangan ini terjadi, data yang disimpan di file log dapat dianggap tidak valid atau menyesatkan.

Information Disclosure
Salah satu komponen penting dalam informed consent. Dengan pemberian informasi yang berkualitas, pasien akan mendapatkan informasi yang cukup untuk membuat keputusan menerima tindakan medis atau tidak. Dengan informed consent yang baik tersebut, hak pasien dihargai.

Denial of Service
Jenis serangan terhadap sistem dalam jaringan internet dengan cara menghabiskan resource yang dimiliki oleh suatu sistem sehingga tidak dapat menjalankan fungsinya dengan benar dan secara tidak langsung mencegah pengguna lain untuk memperoleh akses layanan sistem yang diserang tersebut.

Elevation of Privilege
Cara mudah untuk memulai pemodelan ancaman. Pemodelan ancaman adalah komponen inti dari fase desain dalam Siklus Hidup Pengembangan Keamanan Microsoft (SDL). Permainan kartu Elevation of Privilege (EoP) membantu mengklarifikasi detail pemodelan ancaman dan memeriksa kemungkinan ancaman terhadap perangkat lunak dan sistem komputer.

Sunday, December 4, 2022

Modul 10 : Pertemuan 12 (Socket Programming - Gui dengan Python)

 GUI dengan Python


1.1 Tujuan

1.2 Dasar Teori

Python menyediakan berbagai cara untuk membuat aplikasi dengan Graphical User Interface (GUI). Salah satu library yang paling sering digunakan adalah tkinter. Jalankan perintah berikut untuk instalasi library Tcl/Tk:

    sudo apt-get install python3-tk

Verifikasi hasil instalasi melalui terminal dengan perintah berikut.


Dokumentasi tkinter: https://tkdocs.com/tutorial/index.html 
Semua object GUI yang terlihat di layar aplikasi disebut widget. Widget disusun dalam bentuk hirarki pohon. Berikut contoh hirarki widget untuk percobaan koversi.py

Hirarki diatas menghasil aplikasi gui sebagai berikut:

1.3 Percobaan

Percobaan 1

hello.py


Hasil Program
Analisa:

Percobaan 2
konversi.py

Hasil Program 
Analisa:

Percobaan 3
country.py
Analisa:

Hasil Program








Thursday, December 1, 2022

Pertemuan 11 - Lathan Software Security Design

 Latihan


Buat rangkuman materi yang sudah disampaikan


Definisi Software Security
Software security merupakan hal penting yang diperlukan untuk membangun sistem software yang dapat dipercaya. Ini menjadi teknik yang diterapkan untuk melindungi software dari serangan berbahaya dan risiko peretas lainnya. Sehingga, software terus berfungsi dengan benar di bawah potensi risiko tersebut.

Mengembangkan software yang aman, berfokus pada tahap awal software development life cycle (SDLC) dan kode yang mendasari aplikasi tertentu. Dengan tujuan untuk mengidentifikasi kekurangan dan cacat sedini mungkin. Selain itu, keamanan ini diperlukan untuk menyediakan integrity, authentication, dan availability. Hal ini dikarenakan sistem software yang dengan mudah diserang untuk mencuri informasi, memantau konten, melihat kerentanan, dan sejenisnya.

Contoh Kesalahan Desain

Banyak aplikasi tidak melakukan verifikasi email (sebagai identitas) untuk pembuatan akun, reset password, dll. Akibat kesalahan yang dapat berakibat fatal

  1. Orang lain dapat membuat akun kita dengan alamat email orang tersebut, kita tidak dapat membuat akun dilayanan tersebut
  2. Reset password ke akun orang tersebut

 Yang seharusnya dilakukan adalah:

  1. Pengguna mengisikan alamat email sebagai akun
  2. Email dikirimkan dengan tautan (link) yang unik
  3. Tunggu pengguna melakukan klik terhadap tautan (untuk verifikasi)
  4. Akun baru dibuat Setelah sistem mendapatkan verifikasi tersebut

Pendekatan tradisional Software Security dan Kelemahannya
Cara penanganan keamanan dalam perangkat lunak seperti ini biasa terjadi, tetapi juga bermasalah karena beberapa alasan, beberapa di antaranya:
  1. Pengembang perlu secara eksplisit memikirkan kerentanan keamanan, sementara pada saat yang sama berfokus pada penyelesaian fungsionalitas bisnis.
  2. Mengharuskan setiap pengembang untuk menjadi ahli keamanan.
  3. Diasumsikan bahwa orang yang menulis kode dapat memikirkan setiap potensi kerentanan yang mungkin terjadi sekarang atau di masa mendatang
Software Architecture and Software Design
  1. Arsitektur perangkat lunak (Software Architecture) dari suatu sistem menggambarkan organisasi atau struktur sistem, dan memberikan penjelasan tentang bagaimana perilakunya.
  2. Desain perangkat lunak (Software Design) adalah proses konseptualisasi requirement perangkat lunak ke dalam implementasi perangkat lunak.
6 Aktivitas Risk Analysis Methodology
  1. Software characterization
  2. Threat analysis
  3. Architectural vulnerability assessment
  4. Risk likelihood determination
  5. Risk impact determination
  6. Risk mitigation planning
Risk Likelihood Determination


Desain

Desain adalah panduan prinsip bagaimana sebuah sistem dibangun dan dapat diterapkan di semua tingkatan, mulai dari kode hingga arsitektur. Desain mencakup aktivitas apa pun yang melibatkan pengambilan keputusan aktif

Security Design (Desain Keamanan)
- Abuse | misuse | pelanggaran kebijakan
- Desain keamanan berupa kendali (control) yang diterapkan terhadap hal di atas

Contoh 
Requirement
Pengguna tidak boleh login dari dua (2) tempat yang berbeda (parallel/concurrent login) Ada skenario pengujian login dari 2 IP yang berbeda pada saat yang bersamaan

Desain kendali
  •  Cookies + nomor IP + jenis browser + identitas komputer lainnya
  • Pemberitahuan (dan pencatatan) kejadian
Design Consideration
Menggunakan kriptografi ,Pemilihan panjang kunci (key size), Simetrik vs asimetrik,Digital certificate

Integrity Design

  1. Penggunaan hash function
  2. MD5, SHA
  3. Referential integrity pada database

Buat contoh architecture risk analysis


Architectural risk assessment adalah proses manajemen risiko yang mengidentifikasi kelemahan dalam arsitektur perangkat lunak dan menentukan risiko terhadap aset informasi bisnis yang dihasilkan dari kelemahan tersebut. Melalui proses penilaian risiko arsitektur, kelemahan ditemukan yang memaparkan aset informasi terhadap risiko, risiko diprioritaskan berdasarkan dampaknya terhadap bisnis, mitigasi untuk risiko tersebut dikembangkan dan diterapkan, dan perangkat lunak dinilai ulang untuk menentukan kemanjuran mitigasi. .

Tuesday, November 29, 2022

Modul 9 : Pertemuan 11 (Socket Programming - Multirecipient)

 Multirecipient


1.1 Tujuan

  1. Mahasiswa memahami konsep pengiriman data untuk Multi Recipient
  2. Mahasiswa mampu membuat program pengiriman data untuk Multiple Recipient

1.2 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Setelah sebelumnya kita mempelajari beberapa metode untuk penanganan request dari banyak client ke server, maka muncul pertanyaan Bagaimana Jika kita akan mengirimkan data ke banyak penerima? Ada beberapa solusi yang dapat diterapkan diantaranya adalah menggunakan fasilitas yang disediakan oleh jaringan yaitu broadcast dan multicast. Dalam penerapannya metode broadcast dan multicast sendiri memiliki keterbatasan, yaitu:

  1. Hanya UDP socket yang dapat melakukan broadcast dan multicast
  2. Broadcast hanya mencakup lingkup lokal, biasanya jaringan area local (LAN).
  3. Multicast di seluruh Internet saat ini tidak didukung oleh sebagian besar penyedia layanan Internet.

Broadcast merupakan pengiriman data dengan tujuan semua alamat yang berada dalam 1 jaringan. Aplikasi akan mengirimkan data ke alamat broadcast, apabila data dikirim ke alamat ini maka semua host yang berada dalam jaringan tersebut akan menerima data. Sebelum mengirimkan data ke alamat broadcast, maka kita harus meminta “izin” kepada sistem untuk melakukan broadcast dengan men-set opsi SO_BROADCAST harus pada sisi pengirim. Berbeda dengan broadcast, multicast merupakan pengiriman data dengan tujuan alamat group dalam 1 jaringan. Pada prakteknya dalam pemrograman tidak perlu set permission untuk multicast. Multicast sender dapat men set nilai TTL untuk mengirimkan datagram. Langkah-langkah yang harus dilakukan dalam pemrograman untuk melakukan broadcast maupun multicast pada dasarnya sama dengan pemrograman menggunakan UDP, namun pada broadcast perlu penambahan socket option SO_BROADCAST, sehingga sistem mengizinkan untuk melakukan broadcast.

1.3 Percobaan

Program 1: program multicast

multicast_server.py

multicast_client.py













Hasil Program 

Analisa:
Pada program diatas merupakan program multicast yang mana server dapat menerima 2 client tetapi dengan berbeda PC dengan membuat multicast_group dan server address yang sama. Alamat untuk multicast, yang disebut grup multicast, adalah subset dari rentang alamat IPv4 reguler (224.0.0.0 hingga 230.255.255.255) yang dicadangkan untuk lalu lintas multicast. Disini grup multicast nya adalah 224.3.2.79 . Alamat ini diperlakukan secara khusus oleh router dan switch jaringan, sehingga pesan yang dikirim ke grup dapat didistribusikan melalui Internet ke semua penerima yang telah bergabung dengan grup. Lalu, Mengirim Pesan Multicast Klien gema yang dimodifikasi ini akan mengirim pesan ke grup multicast, lalu melaporkan semua tanggapan yang diterimanya. 

Program2
broadcast_server.py








    broadcast_client.py








Hasil program 

Analisa:

Pada program diatas merupakan program broadcast yang merupakan transmisi jaringan one-to-all. ). Pada server menggunakan domain AF_INET  yang Menyediakan datagram, yang merupakan pesan tanpa sambungan dengan panjang maksimum tetap yang keandalannya tidak dijamin. Datagram dapat rusak, diterima rusak, hilang, atau dikirim berkali-kali. Opsi ini mengambil nilai int. Ini adalah opsi Boolean. Opsi SO_REUSEPORT yang disetel ke soket menentukan bahwa aturan yang digunakan dalam memvalidasi alamat yang disediakan oleh subrutin bind harus memungkinkan penggunaan kembali kombinasi port/alamat lokal. Setiap pengikatan kombinasi port/alamat harus menentukan opsi soket SO_REUSEPORT. 










Wednesday, November 23, 2022

Tugas 5 Socket Programming

Multirecipient

SMTP (Simple Mail Transfer Protocol) adalah protokol TCP/IP standar internet untuk pengiriman surat elektronik dari pengirim ke satu atau lebih penerima. Untuk terhubung ke server email SMTP, kami memerlukan detail HOSTNAME , USERNAME , PASSWORD dan PORT NUMBER . Python menyediakan smtplib modul built-in untuk mengirim email menggunakan SMTP Server. Tidak diperlukan instalasi tambahan. Jadi pertama-tama, kita perlu mengimpor ini di bagian atas skrip dan menentukan objek sesi klien SMTP yang dapat digunakan untuk mengirim email.


Unicast 
Unicast adalah metode pengiriman pada IPv4 yang konsepnya adalah “Point to Point” atau “One to One”, jadi paket yang dikirim hanya akan diterima oleh satu host. Analoginya adalah seperti topologi diatas ada PC0, PC1, PC2, PC3, PC4 yang berada dalam 1 segment jaringan. Lalu ada 2 PC yang sedang berkomunikasi contohnya PC0 dengan PC1, PC selain PC0 dan PC1 tidak akan mengetahui ataupun ikut berkomunikasi.
Unicast biasa digunakan pada protokol : HTTP, FTP, SMTP, Telnet, DNS ,dll.




Kelebihan Unicast
  1. Server merespon permintaan dari klien pada waktu yang tepat.
  2. Server mengirimkan data yang berbeda untuk permintaan yang berbeda dari setiap pelanggan, yang mudah untuk menerapkan layanan yang dipersonalisasi.

Kekurangan unicast
  1. Server mengirimkan aliran data ke setiap klien. Lalu lintas server = jumlah klien × lalu lintas klien.
  2. Pada aplikasi media streaming yang jumlah pelanggannya banyak dan trafik tiap client banyak, maka server mengalami overload.
  3. Bandwidth jaringan yang ada adalah struktur piramida. Bandwidth backbone antar kota hanya 5% dari total bandwidth semua pengguna. Jika hanya 5% pelanggan di jaringan yang menggunakan protokol unicast, jaringan backbone akan kelebihan beban.

Broadcast

Broadcast adalah salah satu metode pengiriman di IPv4 yang memiliki konsep “One to Everyone” merupakan alamat IPv4 yang didesain agar diproses oleh semua host dalam jaringan yang sama. jika ada satu host yang mengirim paket secara broadcast maka setiap host yang aktif di segment jaringan yang sama akan memprosesnya. Analoginya adalah ketika PC0 mengirim paket secara broadcast maka seluruh PC lain akan menerima dan memprosesnya

Dalam jaringan LAN, komputer asal sebagai host mengirimkan data informasi kepada sembarang komputer lain yang terhubung di dalam jaringan. Transmisi jaringan broadcast memiliki kekurangan yaitu sistem asal yang menjadi host tidak akan mengetahui bagaimana respon dari sistem tujuan apakah data diterima dengan baik atau data terjadi corrupt. Contoh penggunaan broadcast adalah transmisi saluran data pada televisi.

Multicast

Multicast adalah metode pengiriman pada IPv4 yang memiliki konsep “One to Many“. Multicast menggunakan IP 224.0.0.0 – 239.255.255.255. Dapat kita analogikan ada PC0, PC1, PC2, PC3, dan PC4. Lalu PC0, PC1, dan PC2 sedang berkomunikasi tanpa diikuti oleh PC3 dan PC4. Contoh dalam kehidpan sehari-harinya adalah ketika seorang pelatih memberikan instruksi kepada pemainnya tanpa diketahui oleh tim lawan. Multicast berjalan pada protokol seperti Live Streaming, Radio Online, dll. Yang dimaksud Multicast adalah komunikasi yang tidak dapat di pause. Multicast biasa digunakan untuk komunikasi routing protocol untuk mencari jalur tercepat.

Modul 8 : Pertemuan 10 (Socket Programming - Multithreading)

 Multithreading


1.1 Tujuan

1.2 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Forking sebagai salah satu metode penanganan multiple request dari client yang sudah dipelajari sebelumnya memiliki kelemahan, yaitu:

a. Performansi

b. Portability

c. Kompleksitas

Salah satu solusi untuk permasalahan diatas adalah penggunaan thread. Thread berjalan secara paralel dan menggunakan shared memory global. Karena semua thread berjalan dalam proses dan ruang memori yang sama, secara otomatis thread berbagi soket yang lewat di antara mereka. Hal ini serupa dengan cara child process mewarisi deskriptor soket. Namun, tidak seperti proses, thread biasanya lebih murah untuk memulai, dan bekerja pada mesin Unix dan Windows di bawah standar Python.

1.3 Percobaan

Percobaan 1

echo_server_multithread.py


echo_client.py

Hasil Program


Analisa: 
Ketika kita coba jalankan programnya, maka pada server akan server langsung mendengarkan dan menghubungkan pada host dan port pada client. Disini server dapat menerima beberapa client yang mana setelah kita run pada client 1 maka ia akan menampilkan teks bahwa client 1 telah terhubung pada host pada 127.0.0.1 dan port 12345, maka pada server langsung tersambung dengan client 1 dengan menampilkan connection from 127.0.0.1, 36944. Begitupun sama dengan Client 2. kita perlu mengimpor modul `threading`, modul threading tingkat tinggi dengan berbagai fitur berguna. Kami menggunakan metode konstruktif `Thread` untuk membuat instance thread. Thread, dalam modul ini, merangkum utas dengan baik, menyediakan antarmuka yang bersih untuk bekerja dengannya. Kemudian kita tambahkan import socket. Lalu, kita memanggil host dengan 'localhost' dan port dengan 12345. 

Percobaan 2
chat_server.py

chat_client.py



Hasil Program


Analisa : 
Nama host server dan port terikat bersama dan terhubung ke soket. Menerima Paket/Pesan dari Server, Untuk menerima pesan, socket_server memanggil fungsi recv() untuk menerima 1024 data. Ini disimpan dalam objek pesan dan diterjemahkan menggunakan fungsi decode(). Pesan tersebut kemudian dicetak dengan nama host server dan pesan diterima.Klien dapat memasukkan pesan apa pun sebagai input dan menyandikannya dan mengirimkannya ke server menggunakan soket.














Tugas 4 Socket Programming

Multiplexing

Multiplexing adalah cara menangani beberapa klien dalam satu proses server. Aplikasi ini memungkinkan klien untuk terhubung ke server dan menambahkannya ke watch list. Watch list hanyalah sebuah array deskriptor soket. Kemudian sistem operasi memberitahu aplikasi klien (jika ada) yang perlu dilayani atau jika klien baru telah membuat koneksi. Untuk menangani permintaan dari client, server menggunakan fungsi select(). Fungsi select() merupakan sebuah fungsi sistem yang memungkinkan programmer untuk menentukan socket descriptor yang akan digunakan. 

Preforking

Preforking : Membuat proses anak dengan jumlah tertentu pada saat aplikasi dimulai,Preforking membatasi semua cost yang terkait dengan pembuatan child process ke bagian inisialisasi aplikasi  ketika sebuah client terkoneksi, maka proses yang menanganinya telah terbentuk. Preforking menciptakan salinan sebuah proses membutuhkan biaya kinerja yang cukup besar, tambah lagi jika dilakukan pada aplikasi yang besar. Biaya kinerja akan semakin mahal seiring banyaknya jumlah client yang terhubung dengan server. Untuk mengurangi biaya kinerja yang dipergunakan untuk menggandakan proses induk digunakan strategi preforking, yaitu dengan membuat proses anak dengan jumlah tertentu pada saat aplikasi dimulai, kemudian proses anak akan melayani client yang terhubung. Fungsi accept() tidak dipanggil pada parent process, tapi pada setiap child process. Listening socket descriptor tidak di close di child process.

Contoh program menggunakan python untuk Multiplexing dan preforking

Server

Client

Hasil program