Python Forensics - Hướng dẫn nhanh
Python là một ngôn ngữ lập trình đa năng với mã dễ đọc, dễ đọc, có thể dễ dàng hiểu được bởi cả các nhà phát triển chuyên nghiệp cũng như các lập trình viên mới làm quen. Python bao gồm nhiều thư viện hữu ích có thể được sử dụng với bất kỳ khung ngăn xếp nào. Nhiều phòng thí nghiệm dựa vào Python để xây dựng các mô hình cơ bản cho các dự đoán và chạy thử nghiệm. Nó cũng giúp kiểm soát các hệ thống hoạt động quan trọng.
Python có các khả năng tích hợp để hỗ trợ điều tra kỹ thuật số và bảo vệ tính toàn vẹn của bằng chứng trong quá trình điều tra. Trong hướng dẫn này, chúng tôi sẽ giải thích các khái niệm cơ bản của việc áp dụng Python trong pháp y kỹ thuật số hoặc tính toán.
Pháp y tính toán là gì?
Pháp y tính toán là một lĩnh vực nghiên cứu mới nổi. Nó giải quyết các vấn đề pháp y bằng cách sử dụng các phương pháp kỹ thuật số. Nó sử dụng khoa học tính toán để nghiên cứu bằng chứng kỹ thuật số.
Pháp y tính toán bao gồm một loạt các đối tượng có các đối tượng, chất và quá trình được điều tra, chủ yếu dựa trên bằng chứng mẫu, chẳng hạn như dấu công cụ, dấu vân tay, dấu vết, tài liệu, v.v. và cũng bao gồm các mẫu sinh lý và hành vi, DNA và bằng chứng kỹ thuật số tại hiện trường vụ án.
Sơ đồ sau đây cho thấy một loạt các đối tượng được đề cập trong Pháp y tính toán.
Pháp y tính toán được thực hiện với sự trợ giúp của một số thuật toán. Các thuật toán này được sử dụng để xử lý tín hiệu và hình ảnh, thị giác máy tính và đồ họa. Nó cũng bao gồm khai thác dữ liệu, học máy và robot.
Pháp y tính toán liên quan đến các phương pháp kỹ thuật số đa dạng. Giải pháp tốt nhất để giảm bớt tất cả các phương pháp kỹ thuật số trong pháp y là sử dụng ngôn ngữ lập trình có mục đích chung như Python.
Vì chúng ta cần Python cho tất cả các hoạt động của pháp y tính toán, chúng ta hãy di chuyển từng bước và hiểu cách cài đặt nó.
Step 1 - Đi tới https://www.python.org/downloads/ và tải xuống các tệp cài đặt của Python theo Hệ điều hành bạn có trên hệ thống của mình.
Step 2 - Sau khi tải gói / trình cài đặt, nhấp vào tệp exe để bắt đầu quá trình cài đặt.
Bạn sẽ thấy màn hình sau đây sau khi cài đặt xong.
Step 3 - Bước tiếp theo là thiết lập các biến môi trường của Python trong hệ thống của bạn.
Step 4 - Sau khi các biến môi trường được thiết lập, hãy gõ lệnh "python" trên dấu nhắc lệnh để xác minh xem cài đặt có thành công hay không.
Nếu cài đặt thành công, bạn sẽ nhận được kết quả sau trên bảng điều khiển.
Các mã được viết bằng Python trông khá giống với các mã được viết bằng các ngôn ngữ lập trình thông thường khác như C hoặc Pascal. Người ta cũng nói rằng cú pháp của Python được vay mượn rất nhiều từ C. Điều này bao gồm nhiều từ khóa Python tương tự như ngôn ngữ C.
Python bao gồm các câu lệnh điều kiện và lặp, có thể được sử dụng để trích xuất dữ liệu một cách chính xác cho pháp y. Để kiểm soát dòng chảy, nó cung cấpif/else, whilevà cấp cao for câu lệnh lặp qua bất kỳ đối tượng "có thể lặp lại" nào.
if a < b:
max = b
else:
max = a
Lĩnh vực chính mà Python khác với các ngôn ngữ lập trình khác là việc sử dụng dynamic typing. Nó sử dụng các tên biến tham chiếu đến các đối tượng. Các biến này không cần khai báo.
Loại dữ liệu
Python bao gồm một tập hợp các kiểu dữ liệu tích hợp sẵn như chuỗi, Boolean, số, v.v. Ngoài ra còn có các kiểu không thay đổi được, có nghĩa là các giá trị không thể thay đổi trong quá trình thực thi.
Python cũng có các kiểu dữ liệu tích hợp sẵn bao gồm tuples là những mảng bất biến, listsvà dictionarieslà các bảng băm. Tất cả chúng đều được sử dụng trong pháp y kỹ thuật số để lưu trữ các giá trị trong khi thu thập bằng chứng.
Gói và Mô-đun của bên thứ ba
Python hỗ trợ các nhóm mô-đun và / hoặc gói còn được gọi là third-party modules (mã liên quan được nhóm lại với nhau trong một tệp nguồn duy nhất) được sử dụng để tổ chức các chương trình.
Python bao gồm một thư viện tiêu chuẩn mở rộng, đây là một trong những lý do chính cho sự phổ biến của nó trong pháp y tính toán.
Vòng đời của mã Python
Lúc đầu, khi bạn thực thi mã Python, trình thông dịch sẽ kiểm tra mã để tìm lỗi cú pháp. Nếu trình thông dịch phát hiện ra bất kỳ lỗi cú pháp nào, thì chúng được hiển thị ngay lập tức dưới dạng thông báo lỗi.
Nếu không có lỗi cú pháp, thì mã được biên dịch để tạo ra bytecode và được gửi đến PVM (Máy ảo Python).
PVM kiểm tra mã bytecode để tìm bất kỳ lỗi nào trong thời gian chạy hoặc lỗi logic. Trong trường hợp PVM tìm thấy bất kỳ lỗi thời gian chạy nào, thì chúng được báo cáo ngay lập tức dưới dạng thông báo lỗi.
Nếu bytecode không có lỗi, thì mã sẽ được xử lý và bạn nhận được đầu ra của nó.
Hình minh họa sau đây cho thấy dưới dạng đồ họa cách mã Python được diễn giải đầu tiên để tạo ra một mã bytecode và cách mã bytecode được PVM xử lý để tạo ra đầu ra.
Để tạo một ứng dụng theo hướng dẫn của Pháp y, điều quan trọng là phải hiểu và tuân theo các quy ước và mẫu đặt tên của nó.
Quy ước đặt tên
Trong quá trình phát triển các ứng dụng pháp y Python, các quy tắc và quy ước phải tuân theo được mô tả trong bảng sau.
Hằng số | Chữ hoa có dấu gạch dưới ngăn cách | NHIỆT ĐỘ CAO |
Tên biến cục bộ | Chữ thường với chữ hoa gập ghềnh (dấu gạch dưới là tùy chọn) | hiện tại |
Tên biến toàn cục | Tiền tố gl viết thường với chữ hoa gập ghềnh (dấu gạch dưới là tùy chọn) | gl_maximumRecordedTempe Nhiệt độ |
Tên chức năng | Chữ hoa có dấu gạch đầu dòng (gạch dưới tùy chọn) với giọng nói chủ động | ConvertFarenheitToCentigrade (...) |
Tên của môn học | Tiền tố ob_ chữ thường với chữ hoa gập ghềnh | ob_myTempRecorder |
Mô-đun | Dấu gạch dưới theo sau là chữ thường với chữ hoa gập ghềnh | _tempRecorder |
Tên lớp | Tiền tố class_ sau đó viết hoa gập ghềnh và giữ ngắn gọn | class_TempSystem |
Hãy để chúng tôi thực hiện một kịch bản để hiểu tầm quan trọng của các quy ước đặt tên trong Pháp y tính toán. Giả sử chúng ta có một thuật toán băm thường được sử dụng để mã hóa dữ liệu. Thuật toán băm một chiều nhận đầu vào là một luồng dữ liệu nhị phân; đây có thể là mật khẩu, tệp, dữ liệu nhị phân hoặc bất kỳ dữ liệu kỹ thuật số nào. Thuật toán băm sau đó tạo ra mộtmessage digest (md) đối với dữ liệu nhận được trong đầu vào.
Thực tế là không thể tạo một đầu vào nhị phân mới sẽ tạo ra một bản tóm tắt thông báo nhất định. Ngay cả một bit duy nhất của dữ liệu đầu vào nhị phân, nếu được thay đổi, sẽ tạo ra một thông điệp duy nhất, khác với thông báo trước đó.
Thí dụ
Hãy xem chương trình mẫu sau đây tuân theo các quy ước nêu trên.
import sys, string, md5 # necessary libraries
print "Please enter your full name"
line = sys.stdin.readline()
line = line.rstrip()
md5_object = md5.new()
md5_object.update(line)
print md5_object.hexdigest() # Prints the output as per the hashing algorithm i.e. md5
exit
Chương trình trên tạo ra kết quả sau.
Trong chương trình này, tập lệnh Python chấp nhận đầu vào (tên đầy đủ của bạn) và chuyển đổi nó theo thuật toán băm md5. Nó mã hóa dữ liệu và bảo mật thông tin, nếu được yêu cầu. Theo hướng dẫn pháp y, tên của bằng chứng hoặc bất kỳ bằng chứng nào khác có thể được bảo mật trong mẫu này.
A hash functionđược định nghĩa là hàm ánh xạ trên một lượng lớn dữ liệu đến một giá trị cố định với độ dài xác định. Hàm này đảm bảo rằng cùng một đầu vào cho ra cùng một đầu ra, thực sự được định nghĩa là một tổng băm. Tổng băm bao gồm một đặc tính với thông tin cụ thể.
Chức năng này thực tế là không thể hoàn nguyên. Do đó, bất kỳ cuộc tấn công nào của bên thứ ba như tấn công vũ phu là không thể thực hiện được. Ngoài ra, loại thuật toán này được gọi làone-way cryptographic algorithm.
Một hàm băm mật mã lý tưởng có bốn thuộc tính chính:
- Phải dễ dàng tính toán giá trị băm cho bất kỳ đầu vào nhất định nào.
- Nó phải không khả thi để tạo đầu vào ban đầu từ hàm băm của nó.
- Không thể sửa đổi đầu vào mà không thay đổi hàm băm.
- Nó phải là bất khả thi khi tìm thấy hai đầu vào khác nhau với cùng một hàm băm.
Thí dụ
Hãy xem xét ví dụ sau giúp khớp mật khẩu bằng cách sử dụng các ký tự ở định dạng thập lục phân.
import uuid
import hashlib
def hash_password(password):
# userid is used to generate a random number
salt = uuid.uuid4().hex #salt is stored in hexadecimal value
return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt
def check_password(hashed_password, user_password):
# hexdigest is used as an algorithm for storing passwords
password, salt = hashed_password.split(':')
return password == hashlib.sha256(salt.encode()
+ user_password.encode()).hexdigest()
new_pass = raw_input('Please enter required password ')
hashed_password = hash_password(new_pass)
print('The string to store in the db is: ' + hashed_password)
old_pass = raw_input('Re-enter new password ')
if check_password(hashed_password, old_pass):
print('Yuppie!! You entered the right password')
else:
print('Oops! I am sorry but the password does not match')
Sơ đồ
Chúng tôi đã giải thích logic của chương trình này với sự trợ giúp của sơ đồ sau:
Đầu ra
Mã của chúng tôi sẽ tạo ra kết quả sau:
Mật khẩu được nhập hai lần khớp với hàm băm. Điều này đảm bảo rằng mật khẩu được nhập hai lần là chính xác, giúp thu thập dữ liệu hữu ích và lưu chúng ở định dạng được mã hóa.
Trong chương này, chúng ta sẽ tìm hiểu về cách bẻ khóa dữ liệu văn bản được lấy trong quá trình phân tích và bằng chứng.
Văn bản thuần túy trong mật mã là một số văn bản bình thường có thể đọc được, chẳng hạn như tin nhắn. Mặt khác, văn bản mật mã là đầu ra của một thuật toán mã hóa được tìm nạp sau khi bạn nhập văn bản thuần túy.
Thuật toán đơn giản về cách chúng tôi biến một tin nhắn văn bản thuần túy thành một văn bản mật mã là mật mã Caesar, được phát minh bởi Julius Caesar để giữ bí mật văn bản thuần túy khỏi kẻ thù của anh ta. Mật mã này liên quan đến việc chuyển mọi chữ cái trong tin nhắn "chuyển tiếp" theo ba vị trí trong bảng chữ cái.
Sau đây là một minh họa demo.
a → D
b → E
c → F
....
w → Z
x → A
y → B
z → C
Thí dụ
Một thông báo được nhập khi bạn chạy một tập lệnh Python cung cấp tất cả các khả năng của các ký tự, được sử dụng cho bằng chứng mẫu.
Các loại bằng chứng mẫu được sử dụng như sau:
- Dấu vết và vết lốp
- Impressions
- Fingerprints
Mọi dữ liệu sinh trắc học bao gồm dữ liệu vectơ, chúng tôi cần bẻ khóa để thu thập bằng chứng đầy đủ.
Đoạn mã Python sau đây cho thấy cách bạn có thể tạo văn bản mật mã từ văn bản thuần túy:
import sys
def decrypt(k,cipher):
plaintext = ''
for each in cipher:
p = (ord(each)-k) % 126
if p < 32:
p+=95
plaintext += chr(p)
print plaintext
def main(argv):
if (len(sys.argv) != 1):
sys.exit('Usage: cracking.py')
cipher = raw_input('Enter message: ')
for i in range(1,95,1):
decrypt(i,cipher)
if __name__ == "__main__":
main(sys.argv[1:])
Đầu ra
Bây giờ, hãy kiểm tra đầu ra của mã này. Khi chúng ta nhập một văn bản đơn giản "Radhika", chương trình sẽ tạo ra văn bản mật mã sau.
Virtualizationlà quá trình mô phỏng các hệ thống CNTT như máy chủ, máy trạm, mạng và lưu trữ. Nó không là gì khác ngoài việc tạo ra một phiên bản ảo chứ không phải thực của bất kỳ hệ điều hành, máy chủ, thiết bị lưu trữ hoặc quy trình mạng nào.
Thành phần chính giúp mô phỏng phần cứng ảo được định nghĩa là hyper-visor.
Hình sau giải thích hai loại ảo hóa hệ thống chính được sử dụng.
Ảo hóa đã được sử dụng trong pháp y tính toán theo một số cách. Nó giúp nhà phân tích theo cách mà máy trạm có thể được sử dụng ở trạng thái đã được xác nhận cho mỗi cuộc điều tra. Có thể khôi phục dữ liệu bằng cách đính kèm hình ảnh dd của ổ đĩa làm ổ đĩa phụ trên máy ảo. Máy tương tự có thể được sử dụng như một phần mềm khôi phục để thu thập bằng chứng.
Ví dụ sau giúp bạn hiểu việc tạo một máy ảo với sự trợ giúp của ngôn ngữ lập trình Python.
Step 1 - Đặt tên máy ảo là 'dummy1'.
Mỗi máy ảo phải có 512 MB bộ nhớ trong dung lượng tối thiểu, tính bằng byte.
vm_memory = 512 * 1024 * 1024
Step 2 - Máy ảo phải được gắn vào cluster mặc định, đã được tính toán.
vm_cluster = api.clusters.get(name = "Default")
Step 3 - Máy ảo phải khởi động từ ổ đĩa cứng ảo.
vm_os = params.OperatingSystem(boot = [params.Boot(dev = "hd")])
Tất cả các tùy chọn được kết hợp thành một đối tượng tham số máy ảo, trước khi sử dụng phương thức thêm của bộ sưu tập vms vào máy ảo.
Thí dụ
Sau đây là tập lệnh Python hoàn chỉnh để thêm một máy ảo.
from ovirtsdk.api import API #importing API library
from ovirtsdk.xml import params
try: #Api credentials is required for virtual machine
api = API(url = "https://HOST",
username = "Radhika",
password = "a@123",
ca_file = "ca.crt")
vm_name = "dummy1"
vm_memory = 512 * 1024 * 1024 #calculating the memory in bytes
vm_cluster = api.clusters.get(name = "Default")
vm_template = api.templates.get(name = "Blank")
#assigning the parameters to operating system
vm_os = params.OperatingSystem(boot = [params.Boot(dev = "hd")])
vm_params = params.VM(name = vm_name,
memory = vm_memory,
cluster = vm_cluster,
template = vm_template
os = vm_os)
try:
api.vms.add(vm = vm_params)
print "Virtual machine '%s' added." % vm_name #output if it is successful.
except Exception as ex:
print "Adding virtual machine '%s' failed: %s" % (vm_name, ex)
api.disconnect()
except Exception as ex:
print "Unexpected error: %s" % ex
Đầu ra
Mã của chúng tôi sẽ tạo ra kết quả sau:
Kịch bản của môi trường mạng hiện đại là việc điều tra có thể gặp khó khăn do một số khó khăn. Điều này có thể xảy ra cho dù bạn đang phản hồi hỗ trợ vi phạm, điều tra các hoạt động nội bộ, thực hiện đánh giá liên quan đến lỗ hổng bảo mật hoặc xác thực việc tuân thủ quy định.
Khái niệm về lập trình mạng
Các định nghĩa sau đây được sử dụng trong lập trình mạng.
Client - Máy khách là một phần của kiến trúc máy khách-máy chủ của lập trình mạng chạy trên máy tính cá nhân và máy trạm.
Server - Máy chủ là một phần của kiến trúc máy khách-máy chủ cung cấp dịch vụ cho các chương trình máy tính khác trong cùng một máy tính hoặc các máy tính khác.
WebSockets- WebSockets cung cấp một giao thức giữa máy khách và máy chủ, giao thức này chạy qua kết nối TCP liên tục. Thông qua đó, các thông báo hai chiều có thể được gửi giữa kết nối TCP socket (đồng thời).
WebSockets ra đời sau nhiều công nghệ khác cho phép máy chủ gửi thông tin đến máy khách. Ngoài việc bắt tay với Upgrade Header, WebSockets độc lập với HTTP.
Các giao thức này được sử dụng để xác thực thông tin được gửi hoặc nhận bởi người dùng bên thứ ba. Vì mã hóa là một trong những phương pháp được sử dụng để bảo mật thông điệp, nên điều quan trọng là phải bảo mật kênh mà thông điệp đã được chuyển qua.
Hãy xem xét chương trình Python sau, chương trình mà khách hàng sử dụng cho handshaking.
Thí dụ
# client.py
import socket
# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 8080
# connection to hostname on the port.
s.connect((host, port))
# Receive no more than 1024 bytes
tm = s.recv(1024)
print("The client is waiting for connection")
s.close()
Đầu ra
Nó sẽ tạo ra kết quả sau:
Máy chủ chấp nhận yêu cầu kênh liên lạc sẽ bao gồm tập lệnh sau.
# server.py
import socket
import time
# create a socket object
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 8080
# bind to the port
serversocket.bind((host, port))
# queue up to 5 requests
serversocket.listen(5)
while True:
# establish a connection
clientsocket,addr = serversocket.accept()
print("Got a connection from %s" % str(addr))
currentTime = time.ctime(time.time()) + "\r\n"
clientsocket.send(currentTime.encode('ascii'))
clientsocket.close()
Máy khách và máy chủ được tạo với sự trợ giúp của lập trình Python lắng nghe số máy chủ. Ban đầu, máy khách gửi yêu cầu đến máy chủ liên quan đến dữ liệu được gửi trong số máy chủ và máy chủ chấp nhận yêu cầu và gửi phản hồi ngay lập tức. Bằng cách này, chúng ta có thể có một kênh liên lạc an toàn.
Các mô-đun trong chương trình Python giúp tổ chức mã. Chúng giúp nhóm các mã liên quan thành một mô-đun duy nhất, giúp dễ hiểu và dễ sử dụng hơn. Nó bao gồm các giá trị được đặt tên tùy ý, có thể được sử dụng để ràng buộc và tham chiếu. Nói một cách đơn giản, mô-đun là một tệp chứa mã Python bao gồm các hàm, lớp và biến.
Mã Python cho một mô-đun (tệp) được lưu bằng .py phần mở rộng được biên dịch khi cần thiết.
Example
def print_hello_func( par ):
print "Hello : ", par
return
Báo cáo nhập khẩu
Tệp nguồn Python có thể được sử dụng như một mô-đun bằng cách thực thi một importcâu lệnh nhập các gói khác hoặc thư viện của bên thứ ba. Cú pháp được sử dụng như sau:
import module1[, module2[,... moduleN]
Khi trình thông dịch Python gặp câu lệnh nhập, nó sẽ nhập mô-đun được chỉ định có trong đường dẫn tìm kiếm.
Example
Hãy xem xét ví dụ sau.
#!/usr/bin/python
# Import module support
import support
# Now you can call defined function that module as follows
support.print_func("Radhika")
Nó sẽ tạo ra kết quả sau:
Một mô-đun chỉ được tải một lần, bất kể số lần nó đã được nhập bằng mã Python.
Từ ... câu lệnh nhập
Fromthuộc tính giúp nhập các thuộc tính cụ thể từ một mô-đun vào không gian tên hiện tại. Đây là cú pháp của nó.
from modname import name1[, name2[, ... nameN]]
Example
Để nhập hàm fibonacci từ mô-đun fib, sử dụng câu lệnh sau.
from fib import fibonacci
Định vị mô-đun
Khi mô-đun đang được nhập, trình thông dịch Python tìm kiếm các chuỗi sau:
Thư mục hiện tại.
Nếu mô-đun không tồn tại, thì Python sẽ tìm kiếm từng thư mục trong biến shell PYTHONPATH.
Nếu vị trí biến shell bị lỗi, Python sẽ kiểm tra đường dẫn mặc định.
Pháp y tính toán sử dụng mô-đun Python và mô-đun của bên thứ ba để lấy thông tin và trích xuất bằng chứng dễ dàng hơn. Các chương tiếp theo tập trung vào việc thực hiện các mô-đun để có được đầu ra cần thiết.
DShell
Dshelllà một bộ công cụ phân tích pháp y mạng dựa trên Python. Bộ công cụ này được phát triển bởi Phòng thí nghiệm Nghiên cứu Quân đội Hoa Kỳ. Việc phát hành bộ công cụ mã nguồn mở này là vào năm 2014. Trọng tâm chính của bộ công cụ này là giúp điều tra pháp y dễ dàng.
Bộ công cụ bao gồm một số lượng lớn các bộ giải mã được liệt kê trong bảng sau.
Sr.No. | Tên và mô tả bộ giải mã |
---|---|
1 | dns Điều này được sử dụng để trích xuất các truy vấn liên quan đến DNS |
2 | reservedips Xác định các giải pháp cho các sự cố DNS |
3 | large-flows Danh sách các luồng ròng |
4 | rip-http Nó được sử dụng để trích xuất các tệp từ lưu lượng HTTP |
5 | Protocols Được sử dụng để xác định các giao thức không chuẩn |
Phòng thí nghiệm Quân đội Hoa Kỳ đã duy trì kho lưu trữ nhân bản trong GitHub trong liên kết sau:
https://github.com/USArmyResearchLab/Dshell
Bản sao bao gồm một tập lệnh install-ubuntu.py () được sử dụng để cài đặt bộ công cụ này.
Sau khi cài đặt thành công, nó sẽ tự động xây dựng các tệp thực thi và các tệp phụ thuộc sẽ được sử dụng sau này.
Các yếu tố phụ thuộc như sau:
dependencies = {
"Crypto": "crypto",
"dpkt": "dpkt",
"IPy": "ipy",
"pcap": "pypcap"
}
Bộ công cụ này có thể được sử dụng để chống lại các tệp pcap (bắt gói tin), thường được ghi lại trong sự cố hoặc trong khi cảnh báo. Các tệp pcap này được tạo bởi libpcap trên nền tảng Linux hoặc WinPcap trên nền tảng Windows.
Scapy
Scapy là một công cụ dựa trên Python được sử dụng để phân tích và điều khiển lưu lượng mạng. Sau đây là liên kết cho bộ công cụ Scapy:
http://www.secdev.org/projects/scapy/
Bộ công cụ này được sử dụng để phân tích thao tác gói tin. Nó rất có khả năng giải mã các gói của một số lượng lớn các giao thức và nắm bắt chúng. Scapy khác với bộ công cụ Dshell bằng cách cung cấp mô tả chi tiết cho người điều tra về lưu lượng mạng. Những mô tả này đã được ghi lại trong thời gian thực.
Scapy có khả năng lập âm mưu bằng các công cụ của bên thứ ba hoặc lấy dấu vân tay hệ điều hành.
Hãy xem xét ví dụ sau.
import scapy, GeoIP #Imports scapy and GeoIP toolkit
from scapy import *
geoIp = GeoIP.new(GeoIP.GEOIP_MEMORY_CACHE) #locates the Geo IP address
def locatePackage(pkg):
src = pkg.getlayer(IP).src #gets source IP address
dst = pkg.getlayer(IP).dst #gets destination IP address
srcCountry = geoIp.country_code_by_addr(src) #gets Country details of source
dstCountry = geoIp.country_code_by_addr(dst) #gets country details of destination
print src+"("+srcCountry+") >> "+dst+"("+dstCountry+")\n"
Tập lệnh này cung cấp mô tả chi tiết về chi tiết quốc gia trong gói mạng, những người đang giao tiếp với nhau.
Tập lệnh trên sẽ tạo ra kết quả sau.
Searchingchắc chắn là một trong những trụ cột của điều tra pháp y. Ngày nay, việc tìm kiếm chỉ có lợi khi điều tra viên đang chạy bằng chứng.
Tìm kiếm từ khóa từ tin nhắn đóng một vai trò quan trọng trong pháp y, khi chúng ta tìm kiếm bằng chứng với sự trợ giúp của từ khóa. Kiến thức về những gì sẽ được tìm kiếm trong một tệp cụ thể cùng với những gì trong tệp đã xóa đòi hỏi cả kinh nghiệm và kiến thức.
Python có nhiều cơ chế tích hợp khác nhau với các mô-đun thư viện tiêu chuẩn để hỗ trợ searchhoạt động. Về cơ bản, các nhà điều tra sử dụng thao tác tìm kiếm để tìm câu trả lời cho các câu hỏi như "ai", "cái gì", "ở đâu", "khi nào", v.v.
Thí dụ
Trong ví dụ sau, chúng ta đã khai báo hai chuỗi và sau đó, chúng ta đã sử dụng hàm find để kiểm tra xem chuỗi đầu tiên có chứa chuỗi thứ hai hay không.
# Searching a particular word from a message
str1 = "This is a string example for Computational forensics of gathering evidence!";
str2 = "string";
print str1.find(str2)
print str1.find(str2, 10)
print str1.find(str2, 40)
Tập lệnh trên sẽ tạo ra kết quả sau.
“find”hàm trong Python giúp tìm kiếm một từ khóa trong một tin nhắn hoặc một đoạn văn. Điều này rất quan trọng trong việc thu thập bằng chứng thích hợp.
Indexingthực sự cung cấp cho điều tra viên cái nhìn đầy đủ về một tệp và thu thập bằng chứng tiềm năng từ nó. Bằng chứng có thể chứa trong tệp, ảnh đĩa, ảnh chụp nhanh bộ nhớ hoặc dấu vết mạng.
Lập chỉ mục giúp giảm thời gian cho các tác vụ tốn nhiều thời gian như keyword searching. Điều tra pháp y cũng bao gồm giai đoạn tìm kiếm tương tác, trong đó chỉ mục được sử dụng để nhanh chóng xác định vị trí từ khóa.
Lập chỉ mục cũng giúp liệt kê các từ khóa trong danh sách được sắp xếp.
Thí dụ
Ví dụ sau cho thấy cách bạn có thể sử dụng indexing bằng Python.
aList = [123, 'sample', 'zara', 'indexing'];
print "Index for sample : ", aList.index('sample')
print "Index for indexing : ", aList.index('indexing')
str1 = "This is sample message for forensic investigation indexing";
str2 = "sample";
print "Index of the character keyword found is "
print str1.index(str2)
Tập lệnh trên sẽ tạo ra kết quả sau.
Trích xuất thông tin có giá trị từ các nguồn sẵn có là một phần quan trọng của pháp y kỹ thuật số. Tiếp cận với tất cả các thông tin có sẵn là điều cần thiết cho quá trình điều tra vì nó giúp truy xuất bằng chứng thích hợp.
Tài nguyên chứa dữ liệu có thể là cấu trúc dữ liệu đơn giản như cơ sở dữ liệu hoặc cấu trúc dữ liệu phức tạp như ảnh JPEG. Các cấu trúc dữ liệu đơn giản có thể được truy cập dễ dàng bằng các công cụ máy tính để bàn đơn giản, trong khi việc trích xuất thông tin từ các cấu trúc dữ liệu phức tạp đòi hỏi các công cụ lập trình phức tạp.
Thư viện hình ảnh Python
Thư viện hình ảnh Python (PIL) bổ sung khả năng xử lý hình ảnh cho trình thông dịch Python của bạn. Thư viện này hỗ trợ nhiều định dạng tệp và cung cấp khả năng xử lý hình ảnh và đồ họa mạnh mẽ. Bạn có thể tải xuống các tệp nguồn của PIL từ:http://www.pythonware.com/products/pil/
Hình minh họa sau đây cho thấy sơ đồ hoàn chỉnh của việc trích xuất dữ liệu từ hình ảnh (cấu trúc dữ liệu phức tạp) trong PIL.
Thí dụ
Bây giờ, hãy có một ví dụ lập trình để hiểu cách nó thực sự hoạt động.
Step 1 - Giả sử chúng ta có hình ảnh sau từ nơi chúng ta cần trích xuất thông tin.
Step 2- Khi chúng tôi mở hình ảnh này bằng PIL, trước tiên nó sẽ lưu ý những điểm cần thiết cần thiết để trích xuất bằng chứng, bao gồm các giá trị pixel khác nhau. Đây là mã để mở hình ảnh và ghi lại các giá trị pixel của nó -
from PIL import Image
im = Image.open('Capture.jpeg', 'r')
pix_val = list(im.getdata())
pix_val_flat = [x for sets in pix_val for x in sets]
print pix_val_flat
Step 3 - Mã của chúng tôi sẽ tạo ra kết quả sau, sau khi trích xuất các giá trị pixel của hình ảnh.
Đầu ra được phân phối đại diện cho các giá trị pixel của sự kết hợp RGB, mang lại hình ảnh tốt hơn về dữ liệu nào cần thiết để làm bằng chứng. Dữ liệu được tìm nạp được biểu diễn dưới dạng một mảng.
Điều tra pháp y và phân tích phần cứng máy tính tiêu chuẩn như đĩa cứng đã phát triển thành một kỷ luật ổn định và được tuân theo sự trợ giúp của các kỹ thuật để phân tích phần cứng không chuẩn hoặc bằng chứng thoáng qua.
Mặc dù điện thoại thông minh ngày càng được sử dụng nhiều hơn trong các cuộc điều tra kỹ thuật số, nhưng chúng vẫn bị coi là phi tiêu chuẩn.
Phân tích pháp y
Các cuộc điều tra pháp y tìm kiếm dữ liệu như các cuộc gọi đã nhận hoặc các số đã gọi từ điện thoại thông minh. Nó có thể bao gồm tin nhắn văn bản, ảnh hoặc bất kỳ bằng chứng buộc tội nào khác. Hầu hết các điện thoại thông minh đều có tính năng khóa màn hình bằng mật khẩu hoặc ký tự chữ và số.
Ở đây, chúng tôi sẽ lấy một ví dụ để chỉ ra cách Python có thể giúp bẻ khóa mật khẩu khóa màn hình để lấy dữ liệu từ điện thoại thông minh.
Kiểm tra thủ công
Android hỗ trợ khóa mật khẩu bằng số PIN hoặc mật khẩu chữ và số. Giới hạn của cả hai cụm mật khẩu được yêu cầu từ 4 đến 16 chữ số hoặc ký tự. Mật khẩu của điện thoại thông minh được lưu trữ trong hệ thống Android trong một tệp đặc biệt có tênpassword.key trong /data/system.
Android lưu trữ mật khẩu SHA1-hashsum và MD5-hashsum. Các mật khẩu này có thể được xử lý trong đoạn mã sau.
public byte[] passwordToHash(String password) {
if (password == null) {
return null;
}
String algo = null;
byte[] hashed = null;
try {
byte[] saltedPassword = (password + getSalt()).getBytes();
byte[] sha1 = MessageDigest.getInstance(algo = "SHA-1").digest(saltedPassword);
byte[] md5 = MessageDigest.getInstance(algo = "MD5").digest(saltedPassword);
hashed = (toHex(sha1) + toHex(md5)).getBytes();
} catch (NoSuchAlgorithmException e) {
Log.w(TAG, "Failed to encode string because of missing algorithm: " + algo);
}
return hashed;
}
Không thể bẻ khóa mật khẩu với sự trợ giúp của dictionary attack vì mật khẩu băm được lưu trữ trong salt file. Điều nàysaltlà một chuỗi biểu diễn hệ thập lục phân của một số nguyên ngẫu nhiên 64 bit. Thật dễ dàng để truy cậpsalt bằng cách sử dụng Rooted Smartphone hoặc là JTAG Adapter.
Điện thoại thông minh đã root
Kết xuất của tệp /data/system/password.key được lưu trữ trong cơ sở dữ liệu SQLite dưới lockscreen.password_saltChìa khóa. Dướisettings.db, mật khẩu được lưu trữ và giá trị hiển thị rõ ràng trong ảnh chụp màn hình sau.
Bộ điều hợp JTAG
Một phần cứng đặc biệt được gọi là bộ điều hợp JTAG (Nhóm Hành động Kiểm tra Chung) có thể được sử dụng để truy cập salt. Tương tự, mộtRiff-Box hoặc một JIG-Adapter cũng có thể được sử dụng cho cùng một chức năng.
Sử dụng thông tin thu được từ Riff-box, chúng ta có thể tìm thấy vị trí của dữ liệu được mã hóa, tức là salt. Sau đây là các quy tắc -
Tìm kiếm chuỗi được liên kết "lockcreen.password_salt."
Byte đại diện cho chiều rộng thực tế của muối, là length.
Đây là độ dài thực sự được tìm kiếm để lấy mật khẩu / mã pin được lưu trữ của điện thoại thông minh.
Bộ quy tắc này giúp lấy dữ liệu muối thích hợp.
Giao thức được sử dụng rộng rãi nhất để đồng bộ hóa thời gian và đã được chấp nhận rộng rãi như một thông lệ được thực hiện thông qua Network Time Protocol (NTP).
NTP sử dụng Giao thức dữ liệu người dùng (UDP) sử dụng thời gian tối thiểu để giao tiếp các gói giữa máy chủ và máy khách muốn đồng bộ hóa với nguồn thời gian nhất định.
Các tính năng của Giao thức thời gian mạng như sau:
Cổng máy chủ mặc định là 123.
Giao thức này bao gồm nhiều máy chủ thời gian có thể truy cập được đồng bộ hóa với các phòng thí nghiệm quốc gia.
Tiêu chuẩn giao thức NTP chịu sự điều chỉnh của IETF và Tiêu chuẩn đề xuất là RFC 5905, có tiêu đề “Giao thức thời gian mạng phiên bản 4: Đặc điểm kỹ thuật giao thức và thuật toán” [NTP RFC]
Hệ điều hành, chương trình và ứng dụng sử dụng NTP để đồng bộ hóa thời gian theo cách thích hợp.
Trong chương này, chúng ta sẽ tập trung vào việc sử dụng NTP với Python, điều này khả thi từ Thư viện Python bên thứ ba ntplib. Thư viện này xử lý hiệu quả công việc nặng nhọc, so sánh kết quả với đồng hồ hệ thống cục bộ của tôi.
Cài đặt Thư viện NTP
Các ntplib có sẵn để tải xuống tại https://pypi.python.org/pypi/ntplib/ như trong hình sau.
Thư viện cung cấp một giao diện đơn giản cho các máy chủ NTP với sự trợ giúp của các phương pháp có thể dịch các trường giao thức NTP. Điều này giúp truy cập các giá trị chính khác như giây nhuận.
Chương trình Python sau giúp hiểu cách sử dụng NTP.
import ntplib
import time
NIST = 'nist1-macon.macon.ga.us'
ntp = ntplib.NTPClient()
ntpResponse = ntp.request(NIST)
if (ntpResponse):
now = time.time()
diff = now-ntpResponse.tx_time
print diff;
Chương trình trên sẽ tạo ra kết quả sau.
Sự khác biệt về thời gian được tính trong chương trình trên. Những tính toán này giúp ích trong điều tra pháp y. Dữ liệu mạng thu được về cơ bản khác với phân tích dữ liệu được tìm thấy trên ổ cứng.
Sự khác biệt về múi giờ hoặc nhận được múi giờ chính xác có thể giúp thu thập bằng chứng để nắm bắt thông điệp thông qua giao thức này.
Các chuyên gia pháp y thường gặp khó khăn khi áp dụng các giải pháp kỹ thuật số để phân tích hàng núi bằng chứng kỹ thuật số trong các tội phạm thông thường. Hầu hết các công cụ điều tra kỹ thuật số là đơn luồng và chúng chỉ có thể thực hiện một lệnh tại một thời điểm.
Trong chương này, chúng tôi sẽ tập trung vào các khả năng đa xử lý của Python, có thể liên quan đến các thách thức pháp lý phổ biến.
Đa xử lý
Đa xử lý được định nghĩa là khả năng của hệ thống máy tính hỗ trợ nhiều hơn một quá trình. Hệ điều hành hỗ trợ đa xử lý cho phép một số chương trình chạy đồng thời.
Có nhiều loại xử lý đa dạng như symmetric và asymmetric processing. Sơ đồ sau đề cập đến một hệ thống đa xử lý đối xứng thường được tuân theo trong điều tra pháp y.
Thí dụ
Đoạn mã sau đây cho thấy cách các quy trình khác nhau được liệt kê nội bộ trong lập trình Python.
import random
import multiprocessing
def list_append(count, id, out_list):
#appends the count of number of processes which takes place at a time
for i in range(count):
out_list.append(random.random())
if __name__ == "__main__":
size = 999
procs = 2
# Create a list of jobs and then iterate through
# the number of processes appending each process to
# the job list
jobs = []
for i in range(0, procs):
out_list = list() #list of processes
process1 = multiprocessing.Process(
target = list_append, args = (size, i, out_list))
# appends the list of processes
jobs.append(process)
# Calculate the random number of processes
for j in jobs:
j.start() #initiate the process
# After the processes have finished execution
for j in jobs:
j.join()
print "List processing complete."
Đây, hàm list_append() giúp liệt kê tập hợp các quy trình trong hệ thống.
Đầu ra
Mã của chúng tôi sẽ tạo ra kết quả sau:
Trong chương này, chúng tôi sẽ tập trung vào việc điều tra ký ức biến động với sự trợ giúp của Volatility, một khung pháp lý dựa trên Python có thể áp dụng trên các nền tảng sau: Android và Linux.
Ki ưc dê phai
Bộ nhớ dễ bay hơi là loại bộ nhớ trong đó nội dung sẽ bị xóa khi nguồn của hệ thống bị tắt hoặc bị ngắt. RAM là ví dụ tốt nhất về bộ nhớ dễ bay hơi. Nó có nghĩa là, nếu bạn đang làm việc trên một tài liệu chưa được lưu vào bộ nhớ không bay hơi, chẳng hạn như ổ cứng và máy tính bị mất nguồn, thì tất cả dữ liệu sẽ bị mất.
Nói chung, pháp y về trí nhớ dễ bay hơi tuân theo mô hình tương tự như các cuộc điều tra pháp y khác -
- Lựa chọn mục tiêu điều tra
- Thu thập dữ liệu pháp y
- Phân tích pháp y
Cơ bản volatility plugins được sử dụng cho tập hợp Android RAM dumpđể phân tích. Sau khi kết xuất RAM được thu thập để phân tích, điều quan trọng là bắt đầu tìm kiếm phần mềm độc hại trong RAM.
Quy tắc YARA
YARA là một công cụ phổ biến cung cấp một ngôn ngữ mạnh mẽ, tương thích với Biểu thức chính quy dựa trên Perl và được sử dụng để kiểm tra các tệp / thư mục bị nghi ngờ và khớp các chuỗi.
Trong phần này, chúng tôi sẽ sử dụng YARA dựa trên việc triển khai đối sánh mẫu và kết hợp chúng với công suất tiện ích. Quá trình hoàn chỉnh sẽ có lợi cho việc phân tích pháp y.
Thí dụ
Hãy xem xét đoạn mã sau. Mã này giúp giải nén mã.
import operator
import os
import sys
sys.path.insert(0, os.getcwd())
import plyara.interp as interp
# Plyara is a script that lexes and parses a file consisting of one more Yara
# rules into a python dictionary representation.
if __name__ == '__main__':
file_to_analyze = sys.argv[1]
rulesDict = interp.parseString(open(file_to_analyze).read())
authors = {}
imps = {}
meta_keys = {}
max_strings = []
max_string_len = 0
tags = {}
rule_count = 0
for rule in rulesDict:
rule_count += 1
# Imports
if 'imports' in rule:
for imp in rule['imports']:
imp = imp.replace('"','')
if imp in imps:
imps[imp] += 1
else:
imps[imp] = 1
# Tags
if 'tags' in rule:
for tag in rule['tags']:
if tag in tags:
tags[tag] += 1
else:
tags[tag] = 1
# Metadata
if 'metadata' in rule:
for key in rule['metadata']:
if key in meta_keys:
meta_keys[key] += 1
else:
meta_keys[key] = 1
if key in ['Author', 'author']:
if rule['metadata'][key] in authors:
authors[rule['metadata'][key]] += 1
else:
authors[rule['metadata'][key]] = 1
#Strings
if 'strings' in rule:
for strr in rule['strings']:
if len(strr['value']) > max_string_len:
max_string_len = len(strr['value'])
max_strings = [(rule['rule_name'], strr['name'], strr['value'])]
elif len(strr['value']) == max_string_len:
max_strings.append((rule['rule_name'], strr['key'], strr['value']))
print("\nThe number of rules implemented" + str(rule_count))
ordered_meta_keys = sorted(meta_keys.items(), key = operator.itemgetter(1),
reverse = True)
ordered_authors = sorted(authors.items(), key = operator.itemgetter(1),
reverse = True)
ordered_imps = sorted(imps.items(), key = operator.itemgetter(1), reverse = True)
ordered_tags = sorted(tags.items(), key = operator.itemgetter(1), reverse = True)
Đoạn mã trên sẽ tạo ra kết quả sau.
Số lượng các quy tắc YARA được thực hiện giúp đưa ra bức tranh tốt hơn về các tệp bị nghi ngờ. Một cách gián tiếp, danh sách các tập tin bị nghi ngờ giúp thu thập thông tin thích hợp cho pháp y.
Sau đây là mã nguồn trong github: https://github.com/radhikascs/Python_yara
Mối quan tâm chính của các cuộc điều tra kỹ thuật số là bảo mật bằng chứng hoặc dữ liệu quan trọng bằng mã hóa hoặc bất kỳ định dạng nào khác. Ví dụ cơ bản là lưu trữ mật khẩu. Do đó, cần phải hiểu cách sử dụng hệ điều hành Linux để triển khai pháp y kỹ thuật số để bảo mật những dữ liệu có giá trị này.
Thông tin cho tất cả người dùng cục bộ chủ yếu được lưu trữ trong hai tệp sau:
- /etc/passwd
- etc/shadow
Cái đầu tiên là bắt buộc, nó lưu trữ tất cả các mật khẩu. Tệp thứ hai là tùy chọn và nó lưu trữ thông tin về người dùng cục bộ bao gồm cả mật khẩu được băm.
Các vấn đề nảy sinh liên quan đến vấn đề bảo mật lưu trữ thông tin mật khẩu trong một tệp mà mọi người dùng đều có thể đọc được. Do đó, mật khẩu băm được lưu trữ trong/etc/passwd, trong đó nội dung được thay thế bằng một giá trị đặc biệt "x".
Các băm tương ứng phải được tra cứu trong /etc/shadow. Các cài đặt trong/etc/passwd có thể ghi đè các chi tiết trong /etc/shadow.
Cả hai tệp văn bản trong Linux đều bao gồm một mục nhập trên mỗi dòng và mục nhập bao gồm nhiều trường, được phân tách bằng dấu hai chấm.
Định dạng của /etc/passwd như sau -
Sr.No. | Tên & Mô tả Trường |
---|---|
1 | Username Trường này bao gồm các thuộc tính của định dạng con người có thể đọc được |
2 | Password hash Nó bao gồm mật khẩu ở dạng mã hóa theo hàm mã hóa Posix |
Nếu mật khẩu băm được lưu dưới dạng emptythì người dùng tương ứng sẽ không yêu cầu bất kỳ mật khẩu nào để đăng nhập vào hệ thống. Nếu trường này chứa giá trị không thể được tạo bởi thuật toán băm, chẳng hạn như dấu chấm than, thì người dùng không thể đăng nhập bằng mật khẩu.
Người dùng có mật khẩu bị khóa vẫn có thể đăng nhập bằng các cơ chế xác thực khác, ví dụ: khóa SSH. Như đã đề cập trước đó, giá trị đặc biệt "x"nghĩa là mật khẩu băm phải được tìm thấy trong tệp bóng.
Các password hash bao gồm những điều sau -
Encrypted salt - Sự encrypted salt giúp duy trì khóa màn hình, ghim và mật khẩu.
Numerical user ID- Trường này biểu thị ID của người dùng. Nhân Linux chỉ định ID người dùng này cho hệ thống.
Numerical group ID - Trường này đề cập đến nhóm chính của người dùng.
Home directory - Các quy trình mới được bắt đầu với một tham chiếu của thư mục này.
Command shell - Trường tùy chọn này biểu thị trình bao mặc định sẽ được khởi động sau khi đăng nhập thành công vào hệ thống.
Pháp y kỹ thuật số bao gồm thu thập thông tin có liên quan để theo dõi bằng chứng. Do đó, id người dùng rất hữu ích trong việc duy trì hồ sơ.
Sử dụng Python, tất cả thông tin này có thể được tự động phân tích cho các Chỉ số Phân tích, tái tạo lại hoạt động hệ thống gần đây. Theo dõi đơn giản và dễ dàng với việc triển khai Linux Shell.
Lập trình Python với Linux
Thí dụ
import sys
import hashlib
import getpass
def main(argv):
print '\nUser & Password Storage Program in Linux for forensic detection v.01\n'
if raw_input('The file ' + sys.argv[1] + ' will be erased or overwrite if
it exists .\nDo you wish to continue (Y/n): ') not in ('Y','y') :
sys.exit('\nChanges were not recorded\n')
user_name = raw_input('Please Enter a User Name: ')
password = hashlib.sha224(getpass.getpass('Please Enter a Password:')).hexdigest()
# Passwords which are hashed
try:
file_conn = open(sys.argv[1],'w')
file_conn.write(user_name + '\n')
file_conn.write(password + '\n')
file_conn.close()
except:
sys.exit('There was a problem writing the passwords to file!')
if __name__ == "__main__":
main(sys.argv[1:])
Đầu ra
Mật khẩu được lưu trữ ở định dạng thập lục phân trong pass_db.txtnhư thể hiện trong ảnh chụp màn hình sau. Các tệp văn bản được lưu để sử dụng thêm trong pháp y tính toán.
Chỉ báo Thỏa hiệp (IOC) được định nghĩa là "các mẩu dữ liệu pháp y, bao gồm dữ liệu được tìm thấy trong các mục hoặc tệp nhật ký hệ thống, xác định hoạt động độc hại tiềm ẩn trên hệ thống hoặc mạng".
Bằng cách giám sát IOC, các tổ chức có thể phát hiện các cuộc tấn công và hành động nhanh chóng để ngăn chặn các vi phạm đó xảy ra hoặc hạn chế thiệt hại bằng cách ngừng các cuộc tấn công trong các giai đoạn trước đó.
Có một số trường hợp sử dụng, cho phép truy vấn các hiện vật pháp y như -
- Tìm kiếm một tệp cụ thể của MD5
- Tìm kiếm một thực thể cụ thể, thực thể thực sự được lưu trữ trong bộ nhớ
- Mục nhập cụ thể hoặc tập hợp các mục nhập, được lưu trữ trong sổ đăng ký Windows
Sự kết hợp của tất cả những điều trên mang lại kết quả tốt hơn trong việc tìm kiếm hiện vật. Như đã đề cập ở trên, Windows registry cung cấp một nền tảng hoàn hảo trong việc tạo và duy trì IOC, hỗ trợ trực tiếp trong việc tính toán pháp lý.
Phương pháp luận
Tìm kiếm các vị trí trong hệ thống tệp và cụ thể là bây giờ trong sổ đăng ký Windows.
Tìm kiếm bộ hiện vật đã được thiết kế bởi các công cụ pháp y.
Tìm kiếm các dấu hiệu của bất kỳ hoạt động bất lợi nào.
Vòng đời điều tra
Vòng đời điều tra tuân theo IOC và nó tìm kiếm các mục nhập cụ thể trong sổ đăng ký.
Stage 1: Initial Evidence- Bằng chứng về sự xâm phạm được phát hiện trên máy chủ hoặc trên mạng. Những người phản hồi sẽ điều tra và xác định giải pháp chính xác, đó là một chỉ số pháp y cụ thể.
Stage 2: Create IOCs for Host & Network- Sau dữ liệu được thu thập, IOC được tạo, điều này có thể dễ dàng với Windows registry. Tính linh hoạt của OpenIOC cung cấp số lượng hoán vị vô hạn về cách một Chỉ báo có thể được tạo ra.
Stage 3: Deploy IOCs in the Enterprise - Khi IOC được chỉ định đã được tạo, người điều tra sẽ triển khai các công nghệ này với sự trợ giúp của API trong sổ đăng ký Windows.
Stage 4: Identification of Suspects- Việc triển khai IOC giúp xác định các nghi phạm một cách bình thường. Ngay cả các hệ thống bổ sung sẽ được xác định.
Stage 5: Collect and Analyze Evidence - Các bằng chứng chống lại nghi phạm được thu thập và phân tích phù hợp.
Stage 6: Refine & Create New IOCs - Nhóm điều tra có thể tạo IOC mới dựa trên bằng chứng và dữ liệu của họ được tìm thấy trong doanh nghiệp và thông tin tình báo bổ sung, đồng thời tiếp tục tinh chỉnh chu trình của họ.
Hình minh họa sau đây cho thấy các giai đoạn của Vòng đời Điều tra -
Cloud computingcó thể được định nghĩa là một tập hợp các dịch vụ được lưu trữ được cung cấp cho người dùng qua Internet. Nó cho phép các tổ chức sử dụng hoặc thậm chí tính toán tài nguyên, bao gồm Máy ảo (VM), bộ nhớ hoặc ứng dụng dưới dạng tiện ích.
Một trong những lợi thế quan trọng nhất của việc xây dựng ứng dụng bằng ngôn ngữ lập trình Python là nó bao gồm khả năng triển khai ứng dụng hầu như trên bất kỳ nền tảng nào, bao gồm cloudcũng. Nó ngụ ý rằng Python có thể được thực thi trên các máy chủ đám mây và cũng có thể được khởi chạy trên các thiết bị tiện dụng như máy tính để bàn, máy tính bảng hoặc điện thoại thông minh.
Một trong những quan điểm thú vị là tạo cơ sở đám mây với thế hệ Rainbow tables. Nó giúp tích hợp các phiên bản đơn và đa xử lý của ứng dụng, đòi hỏi một số cân nhắc.
Pi Cloud
Pi Cloud là nền tảng điện toán đám mây, tích hợp ngôn ngữ lập trình Python với sức mạnh tính toán của Amazon Web Services.
Hãy xem một ví dụ về việc triển khai các đám mây Pi với rainbow tables.
Bàn cầu vồng
A rainbow table được định nghĩa là danh sách tất cả các hoán vị văn bản thuần túy có thể có của mật khẩu được mã hóa cụ thể cho một thuật toán băm nhất định.
Bảng cầu vồng tuân theo một mẫu tiêu chuẩn, tạo ra một danh sách các mật khẩu được băm.
Tệp văn bản được sử dụng để tạo mật khẩu, bao gồm các ký tự hoặc văn bản thuần túy của mật khẩu được mã hóa.
Tệp được sử dụng bởi Pi cloud, gọi chức năng chính sẽ được lưu trữ.
Đầu ra của mật khẩu băm cũng được lưu trữ trong tệp văn bản.
Thuật toán này có thể được sử dụng để lưu mật khẩu trong cơ sở dữ liệu và lưu trữ dự phòng trong hệ thống đám mây.
Chương trình tích hợp sau tạo một danh sách các mật khẩu được mã hóa trong một tệp văn bản.
Thí dụ
import os
import random
import hashlib
import string
import enchant #Rainbow tables with enchant
import cloud #importing pi-cloud
def randomword(length):
return ''.join(random.choice(string.lowercase) for i in range(length))
print('Author- Radhika Subramanian')
def mainroutine():
engdict = enchant.Dict("en_US")
fileb = open("password.txt","a+")
# Capture the values from the text file named password
while True:
randomword0 = randomword(6)
if engdict.check(randomword0) == True:
randomkey0 = randomword0+str(random.randint(0,99))
elif engdict.check(randomword0) == False:
englist = engdict.suggest(randomword0)
if len(englist) > 0:
randomkey0 = englist[0]+str(random.randint(0,99))
else:
randomkey0 = randomword0+str(random.randint(0,99))
randomword3 = randomword(5)
if engdict.check(randomword3) == True:
randomkey3 = randomword3+str(random.randint(0,99))
elif engdict.check(randomword3) == False:
englist = engdict.suggest(randomword3)
if len(englist) > 0:
randomkey3 = englist[0]+str(random.randint(0,99))
else:
randomkey3 = randomword3+str(random.randint(0,99))
if 'randomkey0' and 'randomkey3' and 'randomkey1' in locals():
whasher0 = hashlib.new("md5")
whasher0.update(randomkey0)
whasher3 = hashlib.new("md5")
whasher3.update(randomkey3)
whasher1 = hashlib.new("md5")
whasher1.update(randomkey1)
print(randomkey0+" + "+str(whasher0.hexdigest())+"\n")
print(randomkey3+" + "+str(whasher3.hexdigest())+"\n")
print(randomkey1+" + "+str(whasher1.hexdigest())+"\n")
fileb.write(randomkey0+" + "+str(whasher0.hexdigest())+"\n")
fileb.write(randomkey3+" + "+str(whasher3.hexdigest())+"\n")
fileb.write(randomkey1+" + "+str(whasher1.hexdigest())+"\n")
jid = cloud.call(randomword) #square(3) evaluated on PiCloud
cloud.result(jid)
print('Value added to cloud')
print('Password added')
mainroutine()
Đầu ra
Mã này sẽ tạo ra kết quả sau:
Mật khẩu được lưu trữ trong các tệp văn bản, có thể nhìn thấy được, như thể hiện trong ảnh chụp màn hình sau.