Little boy questioned his mother, he asked what he can be in the future..with a sad smile, she tells him he can be anything he wants to be.... Boy said he’d become (an) astronaut and fly out into space crews around the universe he wanted to see the stars and also see other planets in outer space------------- "Why don’t we just keep dreaming, let’s keep our mind with dream and faith, as long as we wish we can make it come true, how old you are never forget your dream and keep dreaming "

Saturday, 5 January 2019

Python : Fungsi dan Operasi dasar Pandas (Bagian 1)

Pandas (python data analysis liblary)

Pandas adalah salah satu liblary paling populer untuk data science, pandas memudahkan kita untuk mengolah data data berbentuk tabular yang tersimpan dalam baris dan kolom.
Pandas bersifat open source, menyediakan kinerja tinggi, struktur data yang kuat digunakan sebagai alat analisis data untuk bahasa pemrograman Python.
Dengan panda kita dapat dengan mudah merubah data (CSV, excel, JSON atau SQL) menjadi sebuah object data yang terdiri dari baris dan kolom yang disebut dengan DataFrame.
Fitur :
  • DataFrame Object untuk manipulasi data dengan pengindeksan terintegrasi.
  • Alat untuk membaca dan menulis data antara struktur data dalam memori dan berbagai format file.
  • Penyelarasan data dan penanganan terpadu pada kehilangan data.
  • Membentuk kembali dan memutar set data.
  • Seleksi berbasis label, pengindeksan fantastis, dan melakukan subset kumpulan data besar.
  • Penyisipan dan penghapusan kolom struktur data.
  • Memungkinkan operasi split-apply-combine pada Data set.
  • Menghubugkan dan menggabungkan Data set.
  • Pengindeksan hierarki untuk bekerja dengan data dimensi tinggi dalam struktur data dimensi rendah.
  • Fungsionalitas seri waktu: Pembuatan rentang tanggal dan konversi frekuensi.
  • Menyediakan penyaringan data (sorting dan filtering).

Nama pandas berasal dari istilah "panel data" yang merujuk pada istilah ekonometrik untuk set data multidimensi terstruktur. bukan diambil dari nama hewan asal negeri tirai bambu panda, apalagi dari merk minuman liang teh cap panda.

Requirement :

Saya sarankan menggunakan Anaconda Navigator, paket all-in-one dengan sistem antarmuka grafis (GUI) desktop yang mencakup tautan ke semua aplikasi termasuk dalam distribusi ini adalah Python, RStudio, iPython, Jupyter Notebook, JupyterLab, Spyder, Lem, dan Orange. Didalamnya sudah terdapat lebih dari 1400 liblary, termasuk Pandas, Numpy dan Matplotlib.
Python memiliki IDE bawaan pada paket installasinya yaitu IDLE, akan tetapi untuk lebih memudahkan kita dalam Manipulasi dan analisis data dengan Pandas, saya rekomendasikan anda menggunakan IDE Spyder. IDE yang dirancang khusus untuk seorang engineers dan scientist untuk keperluan analisis.
Spyder disertakan secara default termasuk dalam distribusi Anaconda Python, yang dilengkapi dengan semua yang kita butuhkan untuk memulai menuju Python Data Science.

Oke cukup.. Langsung saja, sebelum kita melakukan analis dan manipulasi data menggunakan pandas, pertama kita perlajari dasar dasar operasi dan fungsi pada pandas.
Enjoy!


1. Membuat Series

Series adalah array satu dimensi yang mampu menampung data jenis apa pun (integer, string, float, objek python, dll.). Label axis/label baris secara kolektif disebut indeks.
Membuat series dari sebuah List
import pandas as pd
import numpy as np

nilai = pd.Series([10,20,30,40,np.nan,50])
print(nilai)
Outputnya :
0    10.0
1   20.0
2    30.0
3    40.0
4     NaN
5    50.0
dtype: float64
Secara default, pandas secara otomatis memberi index pada setiap baris dari series

Thursday, 27 December 2018

Python : Lambda

Lambda, dikenal juga sebagai anonymous functions/fungsi anonim atau one line function, disebut demikian karena lambda berupa kode satu baris yang tidak memiliki nama, lambda hanya memiliki kode untuk dieksekusi. Biasanya, fungsi lambda diimplementasikan untuk melakukan sesuatu yang sangat sederhana, seperti mengalikan angka atau mengekstraksi bagian dari string.
Jika kita menggunakan statemen yang sama secara berulang-ulang dalam kode python, Kita bisa mempertimbangkan untuk menggunakan fungsi lambda ini.

Sintaks dasarnya seperti ini :
lambda argumen : ekspresi

Kita tidak dapat menempatkan statemen apapun dalam ekspresi lambda. Ini berarti kita tidak bisa menambahkan statemen if dalam ekspresi lambda, ataupun deklarasi variabel. 
Kita bisa menghindari pembuatan fungsi python untuk hal yang benar benar sangat sederhana sehingga menghindari kita menulis def namafungsi (parameter) : return (expression).
contoh : 
Function
def kali(x,y) :
    return x*y
Lambda
kali = lambda x,y : x * y

Diatas adalah perbandingan antara function biasa dengan lambda, keduanya memiliki tujuan yang sama yaitu mengalikan 2 buah bilangan akan tetapi implementasinya menjadi lebih sederhana jika memakai fungsi lambda. 
kode kali pada lambda di atas bukanlah sebuah variabel, tapi sebuah label, cara menggunakannya seperti ini :
>>> kali(9,8)
72

>>>kali(10,10)
100

Contoh lain :
Membalik string
>>>reverse = lambda s:s[::-1]
>>>reverse('python')
'nohtyp'
Mengekstrak huruf pertama
>>>huruf_awal = lambda s : s[0]
>>>huruf_awal('python')
'p'
Lambda didalam function
>>>def myfunc(n):
    return lambda a : a * n
>>>doubler = myfunc(3)
>>>doubler(11)
33

Python : Akses database PostgreSQL dengan psycopg

Psycopg adalah adaptor database PostgreSQL paling populer untuk bahasa pemrograman Python. Psycopg sepenuhnya memenuhi standar DB API 2.0. Versi saat ini adalah 2.0 dan masih terus aktif dikembangkan yang menjanjikan performa cepat dan stabil. Psycopg dirancang untuk aplikasi multi-threaded yang mendukung pembuatan dan penghapusan banyak kursor serta pembuatan fungsi INSERT atau UPDATE secara bersamaan.

Ketika kita ingin menjalankan SQL query SELECT, UPDATE, DELETE atau INSERT kedalam database postgreSQL kita membutuhkan psycopg sebagai penghubung antara bahasa pemrograman Python dengan Database PostgresSQL.

Homepage : http://initd.org/
Github : https://github.com/psycopg/psycopg2

Cara instalasi psycopg pada python :
pip install psycopg2

Sintaks koneksi seperti ini :
import psycopg2

try:
    conn = psycopg2.connect('''user=username 
                               password=password
                               dbname=namadatabase
                               host=127.0.0.1 
                               port=5432''')
print ("Berhasil terkoneksi")
except:
    print ("Tidak dapat terkoneksi dengan database")

Sintaks diatas akan mengimpor adaptor dan mencoba untuk terhubung ke database. Jika koneksi gagal, maka akan menampilkan eksepsi "Tidak dapat terkoneksi dengan database".

Kemudian kita perlu mendefinisikan cursor :
cur = conn.cursor()

Seletah cursor terdefinisi, kita sudah bisa melakukan eksekusi query dengan cara :
cur.execute('sql query')

cur.execute("""SELECT * from users""")
Kemudian kita perlu menyimpan result-set hasil eksekusi query kedalam variabel, contoh variabel record
record = cur.fetchall()

**kelebihan dari psycopg adalah result set hasil query secara otomatis dikonversi kedalam varible tipe list
untuk menampikan hasil query :
for row in record :
    print(row)
karena record adalah variabel dengan tipe data list maka kita bisa menampilkan data berdasarkan index posisi kolom seperti ini :
for row in record :
    print("{}  {} ".format(row[0],row[1]))

Wednesday, 26 December 2018

Python : SQL Query menjadi Excel dengan Pandas

Bahasa Queri (Bahasa Inggris: query language) adalah suatu bahasa komputer yang digunakan untuk melakukan permintaan terhadap basis data dan sistem informasi.



Wikipedia
Seorang database administrator pasti sehari hari berhubungan dengan yang namanya transaksi query database, yang paling banyak kita gunakan adalah SQL Query.
Ketika memerlukan data dari database, kita menggunakan statement SQL SELECT untuk mengambil data dari tabel database dan mengembalikan data ini dalam bentuk tabel hasil. Tabel hasil ini disebut result-set.

Dibawah ini adalah contoh untuk menuliskan, memindahkan hasil query (result-set) kedalam file excel menggunakan python dengan bantuan module 'pandas'. Kode ini merupakan contoh koneksi python dengan database PostgresSQL, akan tetapi fuction untuk menuliskan hasil query ke excel ini dapat digunakan pada database lainnnya seperti SQL server, mySQL, dll.

Pertama, install modul pandas kedalam python, buka command prompt ketikan perintah :
pip install pandas


sql_list_query = "SELECT * from User"

def export_excel (sql_query, namafile,namasheet):
    cursor.execute(sql_query)
    record = cursor.fetchall()
    columns = [desc[0] for desc in cursor.description]
    df = pd.DataFrame(list(record), columns=columns)
    writer = pd.ExcelWriter(namafile)
    df.to_excel(writer, sheet_name=namasheet,index=False)
    writer.save()

import_excel(sql_list_query,'contoh.xlsx','hasil_query')

Penjelasan skrip diatas :
  • sql_list_query adalah variable tipe string yang berisi sintaks query SQL
  • def export_excel (sql_query, namafile,namasheet) adalah fungsi dengan nama export_excel yang berisi tiga parameter inputan yaitu : sql_query (nama variable yang menampung sintaks query SQL), namafile> (nama file excel) dan namasheet (nama sheet excel).
  • cursor.execute(sql_query) dan record = cursor.fetchall() method eksekusi query dan menyimpan hasilnya pada variabel record
  • columns = [desc[0] for desc in cursor.description], men set nama kolom excel dari deskripsi query Sql.
  • df = pd.DataFrame(list(record), columns=columns), membuat dataframe yang datanya diambil dari result-set dengan nama header kolom = variable colomns.
  • writer = pd.ExcelWriter(namafile), inisialisasi fungsi writer
  • df.to_excel(writer, sheet_name=namasheet,index=False),  menulis dataframe kedalam format excel tanpa meyertakan index dataframe.
  • writer.save(), menyimpan file excel,
  • import_excel(sql_list_query,'nama_file_excel.xlsx','nama_sheet') adalah contoh pemanggilan fuction export_excel yang akan menghasilkan file excel dengan nama file = 'contoh.xlsx', nama sheet = 'hasil_query' dari eksekusi query SQL variable sql_list_query.

Sunday, 23 December 2018

Python : *args dan **kwargs

Ketika anda memperlajari kode pada bahasa pemrograman python pasti menemukan variable *args atau **kwargs ini menjadi parameter dari suatu fuction (fungsi) dalam suatu program. dan terheran sebenarnya variable apa ini?!
*args dan **kwargs
Kedua parameter ajaib ini adalah sebuah fungsonal parameter, *args adalah arguments dan **kwargs adalah keyword arguments. dengan kedua parameter tsb kita dapat membuat function yang kita buat dapat menerima sejumlah parameter argumen dan parameter keyword secara arbitrary (sewenang wenang) tanpa menentukan predefined parameter sebelumnya.

Perlu diketahui pada *args dan **kwargs yang paling penting adalah tanda *(asterik) dan ** (asterik ganda). anda bisa saja mengganti nama variablenya, semisal menjadi *var atau **vars.

Contoh :

Function pada python
def komisi (a,b):
    return sum((a,b))*0.05

komisi(40,60)
In [5]: komisi(40,60)
Out[5]: 5.0
function untuk mengembalikan nilai sejumlah 5% dari penjumlahan dua buah nilai. terdapat dua buah parameter a dan b, didalam function tsb terdapat operasi menjulahkan nilai dari dua paramter tsb kemudian dikalikan dengan 0.05, sehingga jika input nilai parameter a = 40 dan b = 60 maka nilai yang dikembalikan fuction adalah 5.0
So far ga ada masalah ya...hehe

Wednesday, 19 December 2018

Python : Mengirim email dengan yagmail 'Yet Another GMAIL/SMPTP Client'



Module yang dapat digunakan untuk mengirim email pada python yang paling sering dipakai adalah kombinasi module smtplib dengan email. Selain itu ternyata ada module email lain yang dapat digunakan dengan sintaks yang lebih sederhana dan lebih mudah dipakai.

Module yagmail yang ditulis dan dikembangkan oleh Pascal van Kooten dibagikan di halaman githubnya : 

https://github.com/kootenpv/yagmailhttps://github.com/kootenpv/yagmail 

Dihalaman tsb dideskripsikan bahwa tujuan dari yagmail adalah 'The goal here is to make it as simple and painless as possible to send emails.' artinya dilarang makan sebelum berdoa

Seberapa sederhana kah sintaks nya? kira kira untuk mengirim email begini sintaks nya : 


import yagmail
yag = yagmail.SMTP()
contents = ['This is the body, and here is just text http://somedomain/image.png',
            'You can find an audio file attached.', '/local/path/song.mp3']
yag.send('to@someone.com', 'subject', contents)

Lebih sederhana lagi begini :
yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', 'This is the body')

Sunday, 9 December 2018

Python : Kompilasi source code ke bytecode (.py ke .pyc)



Ketika kita menulis kode program dalam bahasa pemrograman python, script yang kita tulis dalam high level language yang artinya bahasa dan perintah yang dimengerti manusia akan disimpan menjadi source file python berekstensi .py, file tsb dapat dibaca dan diubah oleh python intepreter dengan mengubah setiap baris perintah perintah menjadi instruksi instruksi byte code yang dapat dipahami oleh komputer, file byte code tsb disimpan dalam file berekstensi .pyc dan akhirnya dieksekusi oleh python virtual machine.

Proses mengubah dari high level language ke byte code atau kode instruksi komputer tsb dinamakan dengan proses kompliasi (compile).

Mengubah file souces code ke byte code ini memiliki beberapa kelebihan :

  • File source code dan byte code bisa sama sama langsung dieksekusi oleh python intepreter, akan tetapi byte code akan lebih cepat dieksekusi.
  • Proses eksekusi byte code lebih cepat karena tidak ada kompilasi lagi untuk mengubah source code ke byte code.
  • Dari sisi keamanan jauh lebih aman dibandingkan souce code yang masih berupa kode yang bisa dibaca siapa saja. bayangkan ada orang lain yg memiliki akses ke source code anda yang berisi user name, password dan setingan lainnya.  
Cara mengkompilasi file source code (.py) ke file bytecode (.pyc) bisa dilakukan dengan bantuan module 'py_compile'.

Python : String Formatting


String Formatting atau Pemformatan string memungkinkan kita menyuntikkan item ke dalam string daripada kita mencoba menggabungkan string menggunakan koma atau string concatenation. 
Sebagai gambaran, perbandingannya seperti ini :
Nama = 'Budi'
Umur = 25

'Nama saya '+Nama+', umur saya sekarang '+str(Umur)+' Tahun.'  # concatenation

f'Nama saya {Nama}, umur saya sekarang {Umur} Tahun'          # string formatting

Ada tiga cara untuk melakukan pemformatan string.
  • Metode lama menggunakan placeholder menggunakan karakter '%' (modulo)
  • Teknik yang ditingkatkan menggunakan metode string .format ().
  • Metode terbaru, diperkenalkan dengan Python 3.6, menggunakan string literal yang diformat, disebut f-string.

Saturday, 8 December 2018

Python : Input password pada Python dengan getpass()


Ketika program meminta user untuk memasukan password/katasandi tentunya kita tidak ingin password yang sedang kita ketik muncul dilayar.

getpass (), fungsi yang meminta pengguna untuk memasukan kata sandi tanpa menampilkannya. Module getpass menyediakan cara yang aman untuk menangani permintaan kata sandi di mana program berinteraksi dengan pengguna melalui terminal/command prompt.

Contoh penggunaan pada validasi login user
Sintaks nya :


import getpass
userid = 'gani'
passw = 'secret'

uid = input('masukan id anda : ')
pwd = getpass.getpass('masukan password anda : ')
if uid == userid and pwd == passw :
    print('Sukses Login..Selamat datang ', userid)
else :
    print('User ID atau password salah')

Jika dijalankan hasilnya seperti ini :

Done..


Python : Membuka Web Browser


Kita dapat menjalankan web browser untuk membuka website secara spesifik dengan bantun dari module 'webbrowser' mengunakan fungsi open()

sintaks nya kaya gini :

import webbrowser

webbrowser.open('https://www.google.com')

Ketika dijalankan, maka sistem akan segera menjalankan web browser (default web browser) dan membuka website yang kita tentukan sesuai parameter yang kita berikan pada fungsi webbrowser.open("alamat url")

Mudah bukan?
Bagaimana jika ingin membuka sekaligus beberapa website sekaligus? kita bisa gunakan menyimpan website apa saja yang akan dibuka pada tipe data dictionary python

Sintaks :

import webbrowser

web_start = {
        'fb' : "https://web.facebook.com/",
        'gmail' : "https://gmail.com",
        'blog' : 'https://www.blogger.com'
        }


for url in web_start:
    webbrowser.open_new(web_start[url])

Done...

Saturday, 1 December 2018

Cisco Packet Tracer 7.2 Windows & Linux (32-Bit & 64-Bit) Download

Cisco Packet Tracer 7.2

The best way to learn about networking is to do it. Cisco Packet Tracer, an innovative network configuration simulation tool, helps you hone your networking configuration skills from your desktop or mobile device. Use Packet Tracer to:
  • Sharpen your skills for a job interview
  • Prepare for a certification exam
  • Practice what you learn in networking courses

Note :



(1) Packet Tracer memerlukan otentikasi untuk membuka fungsionalitas penuh - lihat Gambar 1 di bawah ini. Pengguna yang tidak mengotentikasi dengan login dan kata sandi NetAcad.com mereka tidak akan dapat menyimpan pekerjaan setelah 10 kali pemakaian guest mode - lihat Gambar 2 di bawah ini misalnya pesan yang diterima oleh pengguna tamu/guest mode.
Jadi kalian yang ingin memakai packet tracer versi terbaru ini (7.1.1) pertama tama harus buat akun netacad dan enroll di course "Introduction to Packet Tracer" nya netacad disini.



Image 1: Packet Tracer Authentication with NetAcad.com Login and Password

Image 2 -- Example Packet Tracer Guest User Message -- user is not logged in.

Download

Sunday, 12 August 2018

Apa itu Directory Traversal?

Serangan dan ancaman directory traversal memanfaatkan validasi yang tidak benar dari input yang disediakan pengguna, yang memungkinkan aktor ancaman untuk mendapatkan akses yang tidak diinginkan ke sistem file. Jenis eksploit ini memanfaatkan praktik pemrograman yang buruk yang gagal untuk memeriksa input yang disediakan oleh pengguna yang memungkinkan pengguna untuk bergerak melalui struktur direktori di luar batas-batas tingkat direktori halaman web.

Prinsip utama serangan traversal direktori adalah melalui web server. Web server, ketika diinstal, diberikan sebuah direktori root pada server, seperti c: \ Inetpub \ wwwroot. Semua file pada halaman web umumnya terdapat dalam direktori ini dan subdirektorinya. Direktori dalam struktur file di luar direktori "root" ini tidak dimaksudkan untuk diakses.

Ketika seseorang melakukan traversal direktori mencoba mengakses struktur file lainnya dengan memasukkan URL yang dibuat, yang akan memungkinkan akses atau bahkan memungkinkan eksekusi program pada server host. Perhatikan gambar berikut:

URL dibagi menjadi dua bagian. Awalnya, https://drive.google.com, adalah situs sebenarnya yang sedang dikunjungi dan bagaimana akses ke server web diperoleh. Sesampai di sana, sisa fungsi URI seperti struktur direktori di komputer. Dari direktori root web-server, ia masuk ke dalam subdirektori untuk menemukan konten yang ingin ditampilkan di browser. Semuanya terlihat normal di sini.

Bayangkan bagaimana keuntungan dari traversal direktori yang memungkinkan untuk digunakan untuk menjelajahi sistem file lainnya. Tambahkan beberapa karakter yang mungkin anda familiar bagi yang sering menggunakan navigasi baris perintah : 
Perhatikan bahwa bagian pertama yang dikelilingi oleh kotak adalah URL (nomor port juga termasuk) yang menyediakan akses ke situs web. Kali ini, daripada membiarkan halaman mengikuti struktur direktori ke konten pilihan yang kita cari, pengguna bisa saja memasukkan beberapa .. \ secara berurutan ke URL. 

Menavigasi sistem file melalui baris perintah secara efektif memberitahu server web untuk naik satu tingkat direktori. Untuk setiap iterasi dari pola karakter, pengguna mendorong dirinya sendiri lebih jauh melalui sistem file. Mereka akan mencapai c: \ Inetpub \ wwwroot (lokasi halaman web pada server web berbasis Windows) dan dilewatkan ke c: \ Inetpub, dan kemudian c: \ (direktori tingkat atas umum pada web berbasis Windows server). Jika menambahkan lebih banyak karakter ...  daripada direktori yang tersedia untuk dilewati, bukan masalah karena setiap set ekstra akan menuntun pengguna di direktori teratas (karena tidak ada tempat yang lebih tinggi lagi). 

Dalam contoh diatas, bagian terakhir dari alamat adalah boot.ini. File konfigurasi ini berisi teks ASCII, sehingga browser web hanya menampilkan konten kepada pengguna seolah-olah menampilkan halaman web apa pun. Tinjau informasi berharga tentang server web.

Lebih jauh lagi, lihat contoh dibawah ini :
Perhatikan URI : %255c, kode tsb akan di decode ke back-slash. Ini adalah bentuk obfuscation.

Kali ini, pengguna telah melihat-lihat lokasi yang executable (dalam hal ini, command prompt Windows) dan meneruskannya dengan memasukan beberapa argumen. Eksekusi dan output selanjutnya ditampilkan melalui browser. di contoh ini penyerang hanya menjalankan perintah dir, tetapi banyak hal lain yang bisa dia lakukan dengan menjalankan cmd.exe pada target? Apa yang bisa dieksekusi lainnya?

Traversal direktori juga dapat digunakan dengan skrip. Lihat contoh ini di server web berbasis Linux:
Kode ini akan disuntikkan ke skrip situs web dan kemudian diurai. Cookie akan diproses dan browser akan diarahkan ke file /etc/passwd.
Outputnya adalah isi dari /etc/passwd. Beberapa informasi yang sangat berharga dapat dikumpulkan di sini bukan?!.

Traversal direktori dapat menjadi teknik yang sangat berharga terhadap server web yang tidak melakukan tindakan pencegahan yang tepat untuk memvalidasi masukan. Semuanya dapat diakses, mulai dari target sidik jari hingga menemukan akun dan kata sandi, bahkan melakukan eksekusi kode. Aplikasi web-server modern sudah termasuk pengecekan input dan patch untuk mengatasi celah keamanan ini. Oleh karena itu, kerentanan ini jarang terlihat kecuali untuk sistem warisan, yang jarang dimaintenance dan diperbarui.

Jika anda ingin mengeksplore lebih jauh tentang traversal direktori, cobalah gunakan environment yang disediakan pada OWASP Mutillidae.

apa itu Obfuscated JavaScript?

Threat actor / aktor ancaman adalah entitas jahat yang dapat bertanggung jawab pada dampak negatif terhadap postur keamanan keseluruhan dari suatu jaringan. Mereka akan menggunakan berbagai vektor serangan untuk mendapatkan akses tidak sah ke sumber daya jaringan. 

Vektor serangan memungkinkan aktor ancaman untuk mengeksploitasi kerentanan sistem yang diketahui atau tidak dikenal. Jenis-jenis vektor serangan yang digunakan dapat bergantung pada tingkat keterampilan, motivasi dari aktor ancaman, dan target yang mereka pilih. Untuk secara efektif mengenali vektor-vektor serangan ini, seorang analis harus terbiasa dengan dasar-dasar serangan dan bagaimana mereka dilakukan.

Vektor untuk serangan termasuk yang berikut:
  • Web: Serangan umum mencakup :
    • SQL Injection
    • Inklusi file lokal atau traversal direktori
    • Arbitrary code execution
    • Obfuscated web scripting
    • XSS
    • Cross-site forged requests
  • Kerentanan perangkat lunak : Kerentanan perangkat lunak, terutama varian yang dapat memproses kapabilitas jaringan, juga merupakan vektor serangan potensial. Eksploitasi yang ditulis terhadap kerentanan perangkat lunak tersebut mungkin termasuk shellcode.
  • Payload umum : Dalam muatan umum, seorang analis mungkin menemukan bind-shell dan reverse-shell yang akan memungkinkan penyerang untuk mendapatkan akses remote command-line ke target.
  • Pengguna akhir / end user: Pengguna akhir adalah vektor serangan potensial lainnya yang akan dieksploitasi oleh aktor ancaman termotivasi. File dan dokumen yang berisi kode berbahaya yang disematkan dan / atau disamarkan dapat muncul sebagai dokumen terlampir dalam pesan email atau dapat secara tidak sengaja diunduh ke sistem oleh pengguna yang mengklik tautan URL yang ditampilkan dalam pesan. USB thumb drive yang terinfeksi dapat diinstal dengan file berbahaya yang dapat secara otomatis dijalankan setelah dimasukkan ke dalam sistem. Pada tahun 2008, USB flash drive menginfeksi komputer di Stasiun Luar Angkasa Internasional dengan perangkat lunak berbahaya.

Obfuscated JavaScript 

Dalam pengembangan perangkat lunak, obfuscation code (kode yang dikaburkan/ disamarkan) adalah teknik yang digunakan untuk menyamarkan munculnya kode sumber yang berjalan pada suatu sistem. Mengaburkan kode sumber memiliki banyak tujuan dan umumnya digunakan untuk mengurangi ukuran keseluruhan dari kode atau aplikasi perangkat lunak. 

Obfuscated JavaScript merender kode sumber JavaScript ke dalam bentuk yang tidak mudah dibaca, dengan maksud menyamarkan fungsi kode yang dimaksud. Kode JavaScript dijalankan saat runtime oleh browser sistem klien dan tertanam dalam halaman HTML.

JavaScript memungkinkan pengguna untuk berinteraksi dengan formulir atau halaman yang ditampilkan di situs web. Encoding JavaScript adalah metode populer untuk mengaburkan kode sumber JavaScript ke dalam pernyataan yang sulit untuk dibaca atau ditafsirkan. Pengembang web biasanya akan menggunakan kode JavaScript yang dikaburkan sebagai upaya untuk mencegah kode sumber JavaScript mereka dianalisa atau dicuri. Kode JavaScript dapat dengan mudah dilihat selama sesi web dan tujuan mengaburkan kode sumber adalah untuk melindungi kekayaan intelektual pengembang.

Obfuscated JavaScript juga dapat digunakan sebagai sarana untuk menyamarkan kode sumber yang dibuat dengan maksud meruksak sistem. Penyerang sering mengaburkan kode JavaScript mereka untuk menghindari deteksi dan mengeksekusi kode berbahaya di workstation. Aktor ancaman ingin menyamarkan kode jahat sehingga mungkin dengan bebas dieksekusi untuk mencapai tujuan.

Analis harus memahami bahwa tindakan mengaburkan kode sumber JavaScript seharusnya tidak dianggap berbahaya secara otomatis. Namun, analis harus dapat mengenali kompleksitas dan tantangan yang terkait dengan mengidentifikasi vektor serangan yang berlaku ini. Jenis-jenis serangan ini semakin populer dan sulit dideteksi.

Contoh teknik umum yang digunakan untuk mengaburkan kode JavaScript seperti berikut:
  • Secara otomatis mengganti nama variabel menjadi nama acak dan menjadikan kode menjadi lebih sulit dibaca dan sulit dipahami.
  • JavaScript akan mengabaikan ruang putih di dalam kodenya. Pengacakan ruang-putih adalah proses penempatan karakter spasi-putih dan jeda baris di seluruh kode tanpa mengubah fungsinya.
  • Kode sumber yang memodifikasi diri sendiri yang menulis ulang dirinya sendiri saat dieksekusi.
  • Menggunakan kode karakter dan manipulasi string yang dikombinasikan dengan penyalahgunaan ekspresi eval ‘eval ()’.

Mendeskripsikan Insiden Keamanan dalam VERIS


Untuk memerangi ancaman keamanan dunia maya yang luas dan bervariasi saat ini, organisasi menyadari pentingnya berbagi informasi keamanan untuk tetap mengikuti perkembangan terkini dari ancaman ancaman yang bisa terjadi sekarang. Masalahnya adalah sulit untuk membagi temuan informasi keamanan dengan mudah, aman, dan  menghasilkan transfer informasi yang dapat dimengerti. Berbagi informasi adalah pekerjaan yang rumit dan menantang. Jika dilakukan dengan benar, semua orang yang terlibat mendapat manfaat dari kecerdasan kolektif ini. Jika dilakukan dengan buruk, itu malah dapat menyesatkan partisipannya atau menciptakan kesempatan belajar untuk para musuh. VERIS (Vocabulary for Event Recording and Incident Sharing) , awalnya dikembangkan oleh Verizon, adalah satu set metrik yang menyediakan bahasa umum untuk menggambarkan insiden keamanan secara terstruktur dan berulang.

VERIS adalah format terbuka yang dapat digunakan siapa pun di suatu organisasi tanpa biaya lisensi apa pun (gratis). VERIS membantu organisasi untuk mengumpulkan informasi terkait insiden dan berbagi informasi secara anonim dan bertanggung jawab. Dengan menggunakan metrik VERIS standar, organisasi dapat membandingkan diri mereka dengan organisasi lain, yang membuka sumber baru informasi yang berguna bagi organisasi, termasuk perbandingan antara metrik oranisasi terhadap rata-rata di seluruh dunia, perbandingan sebelum dan sesudah ketika kontrol keamanan baru diterapkan dalam organisasi, dan tren ancaman untuk melihat apakah ada peningkatan.

VCDB adalah repositori terbuka dan bebas dari insiden keamanan yang dilaporkan secara publik yang dicatat dalam format VERIS. Peluncuran awal VCDB berisi data dari lebih dari 1.200 insiden, terutama dari tahun 2012 dan 2013.

Gambar tersebut menunjukkan empat komponen utama VERIS (aktor, tindakan, aset, dan atribut, yang dikenal sebagai "4 A's") yang digunakan untuk menggambarkan sebuah insiden.

Struktur Insiden

Insiden yang didokumentasikan dengan menggunakan skema dan struktur VERIS dapat berisi lima bagian utama berikut yang dirancang untuk menangkap aspek yang berbeda dari narasi insiden menggunakan variabel yang berbeda. Jika dilihat bersama, bagian ini harus memberi organisasi gagasan yang lebih baik tentang penyebab dan keparahan insiden.
Incident Tracking
incident_id
ExampleBreach_00001
Victim Demographics
victim.victim_id
Example Inc.
Incident Description
actor.external.country
ISO 3166-2:RU
Discovery and Response
corrective_action
Create a new IPS rule to ...
Impact Assessment
impact.overall_rating
Damaging
  • Bagian pelacakan insiden (incident tracking) menangkap informasi umum tentang insiden tersebut. Tujuan utamanya adalah memungkinkan organisasi untuk mengidentifikasi, menyimpan, dan mengambil insiden dari waktu ke waktu. Misalnya, variabel incident_id digunakan untuk mengidentifikasi insiden secara unik untuk penyimpanan dan pelacakan dari waktu ke waktu.
  • Bagian demografi korban (Victim Demographics) menjelaskan (tetapi tidak mengidentifikasi) organisasi yang dipengaruhi oleh insiden tersebut. Tujuan utamanya adalah untuk membantu perbandingan antara berbagai jenis organisasi (di seluruh industri, ukuran, wilayah, dan sebagainya) atau departemen dalam satu organisasi. Ketika menggunakan VERIS hanya secara internal dalam suatu organisasi, organisasi mungkin tidak peduli dengan demografi korban, karena organisasi akan menjadi satu-satunya korban. Namun, untuk membagikan data ini dengan organisasi lain, akan sangat membantu untuk mengetahui tentang organisasi korban. VERIS memudahkan untuk membagikan informasi yang relevan tanpa mengungkapkan nama organisasi. Misalnya, variabel victim.victim_id digunakan untuk menghubungkan insiden dengan entitas yang dipengaruhi oleh mereka (tanpa mengidentifikasi entitas itu sendiri), yang dapat berguna dalam skenario berbagi kejadian anonim untuk banyak tujuan. Misalnya, perlu untuk mempelajari hal-hal seperti rata-rata jumlah insiden per organisasi, mengapa organisasi tertentu mengalami lebih banyak insiden, apakah tindakan korektif tertentu mengarah pada insiden atau kerugian yang berkurang, dan seterusnya.
  • Bagian deskripsi insiden (incident description) menerjemahkan narasi insiden "siapa melakukan apa dengan apa (atau siapa) dengan hasil apa" menjadi bentuk yang lebih cocok untuk tren dan analisis. VERIS menggunakan model ancaman A4 yang dikembangkan oleh tim Verizon RISK. Dalam model A4, insiden dipandang sebagai serangkaian peristiwa yang berdampak buruk pada aset informasi dari suatu organisasi. Setiap peristiwa terdiri dari "4 A's" (aktor, tindakan, aset, dan atribut), yang menyediakan struktur tingkat teratas untuk metrik di bagian ini. Sebagai contoh, variabel actor.external.country digunakan untuk mengidentifikasi asal geografis aktor, yang berguna pada berbagai level investigasi, operasional, dan strategis. VERIS menggunakan kode ISO 3166 untuk variabel negara.
  • Bagian penemuan dan tanggapan (discvery and response) berfokus pada garis waktu kejadian, bagaimana insiden itu ditemukan, dan pelajaran yang didapat selama proses tanggap dan remediasi. Ini memberikan wawasan yang berguna ke dalam deteksi dan kemampuan defensif organisasi dan membantu mengidentifikasi tindakan korektif yang diperlukan untuk medeteksi dan mencegah insiden serupa di masa depan. Misalnya, variabel korektif_action digunakan untuk mengidentifikasi apa yang harus (atau apa yang seharusnya) dilakukan untuk mencegah kejadian seperti itu dari berulang.
  • Bagian penilaian dampak (impact assesement) memanfaatkan tiga perspektif dampak untuk memberikan pemahaman dan ukuran konsekuensi yang terkait dengan insiden tersebut. Bersama-sama, mereka berusaha untuk mengkategorikan berbagai kerugian yang dialami, memperkirakan besarnya, dan menangkap penilaian kualitatif dari keseluruhan efek pada organisasi. Misalnya, variabel impact.overall_rating digunakan untuk menilai keseluruhan dampak insiden ini terhadap organisasi.
Daftar lengkap variable VERIS dapat dilihat dihalaman : http://veriscommunity.net/schema-docs.html dan kemudian skema terbaru VERIS dapat dilihat di Github : https://github.com/vz-risk/veris.

Computer Security Incident Response Team (CSIRT)

Kesuksesan keamanan bukan hanya tentang menjaga ancaman dari jaringan Anda. Ini juga tentang cepat merespon dan menggagalkan serangan ketika itu terjadi.

CSIRT adalah organisasi layanan yang bertanggung jawab untuk menerima, meninjau, dan menanggapi laporan dan aktivitas insiden keamanan komputer. Layanan CSIRT biasanya dilakukan untuk konstituensi yang ditentukan yang bisa menjadi entitas induk seperti organisasi perusahaan, pemerintah, atau pendidikan; suatu wilayah atau negara; jaringan penelitian; atau klien berbayar.
CSIRT dapat menjadi tim yang diformalkan atau tim ad hoc. Tim yang diformalkan melakukan pekerjaan respons insiden sebagai fungsi pekerjaan utamanya. Tim ad hoc dipanggil bersama selama insiden keamanan komputer yang sedang berlangsung atau untuk menanggapi insiden ketika diperlukan.

Setiap CSIRT berbeda. Setiap organisasi, berdasarkan persyaratannya, harus memutuskan struktur dan operasi CSIRT.
CSIRT harus memiliki pemahaman mendalam tentang jaringan dan asetnya. Seringkali, penyerang melakukan pengintaian menyeluruh dan tahu lebih banyak tentang jaringan target mereka daripada tim keamanan korban.

Misi utama CSIRT adalah untuk membantu memastikan perusahaan, sistem, dan pelestarian data dengan melakukan penyelidikan komprehensif terhadap insiden keamanan komputer, dan berkontribusi pada pencegahan insiden tersebut dengan terlibat dalam penilaian dan deteksi ancaman, perencanaan mitigasi, analisis kecenderungan insiden, dan tinjauan arsitektur keamanan.

CSIRT dapat menjadi bagian dari SOC. Ketika analis SOC mengidentifikasi ancaman, kebijakan respons insiden diberlakukan, dan langkah-langkah yang tepat harus dilakukan agar berhasil melindungi aset. Analis SOC harus memastikan bahwa mereka benar-benar mengidentifikasi ancaman sebelum mengambil tindakan apa pun. Persyaratan ini berarti sepenuhnya mendiagnosis kejadian sebelum mencoba untuk menahan insiden tersebut.

Kategori CSIRT

SIRT (Security Incident Response Team) terdiri dari berbagai bentuk dan ukuran dan melayani beragam konstituen. Beberapa kategori umum CSIRT, tetapi tidak terbatas pada, yang berikut:
  • Internal CSIRT memberikan layanan penanganan insiden kepada organisasi induknya, yang bisa menjadi CSIRT untuk bank, perusahaan manufaktur, universitas, atau agen federal.
  • National CSIRT memberikan layanan penanganan insiden ke suatu negara. Contohnya termasuk JPCERT / CC atau Tim Tanggap Darurat Komputer Singapura (SingCERT). Daftar CSIRT nasional dapat ditemukan di: http://www.cert.org/incident-management/national-csirts/national-csirts.cfm.
  • Coordination Center mengoordinasi dan memfasilitasi penanganan insiden di berbagai CSIRT. Contohnya termasuk Pusat Koordinasi CERT atau US-CERT.
  • Analysis Center fokus pada menganalisa data dari berbagai sumber untuk menentukan tren dan pola dalam aktivitas insiden. Informasi ini dapat digunakan untuk membantu memprediksi ancaman di masa depan atau memberikan peringatan dini ketika aktivitas tersebut sesuai dengan set karakteristik yang ditentukan sebelumnya.
  • Tim vendor menangani laporan kerentanan dalam perangkat lunak atau produk perangkat keras mereka. Mereka dapat bekerja di dalam organisasi untuk menentukan apakah produk mereka rentan dan mengembangkan strategi remediasi dan mitigasi. Tim vendor mungkin juga CSIRT internal untuk organisasi vendor. Misalnya, Tim Respons Insiden Keamanan Produk Cisco (PSIRT) adalah tim global khusus yang mengelola penerimaan, penyelidikan, dan pelaporan publik tentang informasi kerentanan keamanan yang terkait dengan produk dan jaringan Cisco. Cisco PSIRT menyediakan penasehat keamanan dan respons keamanan.
  • Penyedia respon insiden menawarkan layanan penanganan insiden sebagai layanan gratis untuk organisasi lain.
  • CSIRT dibahas juga dalam RFC 2350.

Saturday, 11 August 2018

NSM Data : Session data

Session Data mendokumentasikan semua percakapan individu yang dilihat oleh sistem monitoring: siapa yang berbicara dengan siapa dan kapan. IP 5-tuple (souce ip, source port, destination ip, destination port dan protocol) dengan stempel waktu menyediakan item penting yang terkait dengan event session. Data yang lebih canggih juga dapat dimasukkan dalam session data. Misalnya, jumlah byte total dan jumlah paket total dapat dihitung di kedua arah.

Security Onion menawarkan beberapa alat yang dapat menangkap session data, termasuk Bro, Argus, dan PRADS. Di NSM, umumnya merupakan praktik terbaik untuk membatasi redundansi. Meskipun ada pengecualian, tidak efisien memiliki banyak alat untuk mengumpulkan dan menyimpan data yang sebagian besar sama. Bro dapat menghasilkan lebih banyak session data. Analis dapat mengkonfigurasinya untuk menghasilkan data sesi, data transaksi, konten yang diekstrak, data statistik, metadata, dan data peringatan. Untuk alasan ini, administrator Onion Keamanan biasanya akan memilih untuk mengimplementasikan Bro tetapi tidak Argus atau PRADS.

Bro adalah framework analisis jaringan yang ditulis dalam bahasa scripting khusus yang juga diberi nama Bro. Instalasi Bro secara default menyediakan beberapa fungsi NSM. dengan memberikan catatan audit dari setiap sesi jaringan yang terlihat pada kabel. Ini juga menyediakan catatan audit di application layer. Misalnya, semua sesi HTTP dilacak dengan jenis URI yang diminta, MIME, dan respons server. Bahasa scripting Bro menyediakan analisa untuk banyak protokol yang umum digunakan yang dapat digunakan untuk analisis semantik pada application layer
Session data sangat sederhana, dan dapat digunakan untuk menjawab banyak pertanyaan penting yang muncul di SOC. Threat intelegence report dapat memberikan daftar alamat IP eksternal yang mencurigakan. session data dapat digunakan untuk melihat apakah sistem internal telah berkomunikasi dengan salah satu alamat IP eksternal yang mencurigakan. Demikian pula, jika port TCP tertentu dikaitkan dengan perintah dan kontrol kampanye malware yang aktif, data sesi dapat digunakan untuk melihat apakah sistem internal berkomunikasi dengan menggunakan port TCP tsb. Jika host internal telah diidentifikasi telah dikompromikan, session data dapat mengidentifikasi sistem internal lain yang telah dikomunikasikan dengan (gerakan lateral potensial) dan setiap sistem eksternal yang telah dikomunikasikan dengan (potensi pencurian data).