text-overflow: ellipsis;
overflow: hidden;
Bài viết được trích ra từ đồ án tốt nghiệp của mình. Mong rằng nó có thể giúp ích cho các bạn đang và sắp tìm hiểu về botnet.
Các phương pháp mà các nhà nghiên cứu bảo mật thường sử dụng để phát hiện botnet là:
- Phát hiện dựa trên honeypot.
- Phát hiện dựa trên giám sát và phân tích lưu lượng mạng.
- Phát hiện dựa trên giám sát và phân tích DNS logs.
I. Phát hiện dựa trên honeypot
Honeypot là một hệ thống tài nguyên được xây dựng với mục đích giả dạng, đánh lừa những kẻ sử dụng và xâm nhập không hợp pháp, thu hút sự chú ý của chúng, ngăn không cho chúng tiếp xúc với hệ thống thực. Hệ thống tài nguyên thông tin mà honeypot có thể giả dạng chẳng hạn như Mail Server, DNS server, Webserver, …Từ ý tưởng đánh lừa kẻ tấn công, chẳng hạn như phần mềm độc hại tự động, để chúng tấn công vào honeypot. Công việc tiếp theo là các chuyên gia bảo mật sẽ nghiên cứu phần mềm độc hại đó một cách chi tiết để thu thập thông tin về botnet, như nguồn gốc của máy chủ C&C, các thành viên trong botnet, hay các hành vi tấn công của botnet. Honeypot được chia thành hai loại chính là honeypot tương tác thấp và honeypot tương tác cao.
- Honeypot tương tác thấp: Các dịch vụ hoặc hệ điều hành được mô phỏng ở mức độ tương tác thấp. Mục đích chính của những honeypot này là nắm bắt các mẫu code độc hại, vì thế việc triển khai và duy trì chúng tương đối dễ dàng và cũng ít gặp rủi ro, nhưng bị giới hạn về số lượng dịch vụ. Phổ biến cho loại honeypot này là Nepenthes. Nepenthes được xây dựng với mục đích thu thập càng nhiều mẫu phần mềm độc hại càng tốt. Sau khi đã thu thập được, các chuyên gia sẽ phân tích chúng. Trước tiên sẽ quét để tìm ra đặc tính, sau đó là hành vi thông qua sandbox.
- Honeypot tương tác cao: Cho phép kẻ tấn công tương tác với một hệ thống thực. Mức độ rủi ro khi triển khai cao hơn, do đó cần thiết lập các biện pháp phòng ngừa và các điều khoản đặc biệt để ngăn chặn các cuộc tấn công chống lại hệ thống. Ngoài ra, honeypot dạng này cũng khó thiết lập triển khai và duy trì hơn. Mục đích chính của các honeypot này là để hiểu rõ các tình huống tấn công, vì thế nó yêu cầu một khả năng tương tác mạnh mẽ đối với kẻ tấn công. Một thiết lập phổ biến nhất cho loại honeypot này là GenII.
Phương pháp phát hiện botnet dựa vào honeypot mang lại hiệu quả cao trong việc nghiên cứu và phân tích các đặc điểm của botnet, đã được nhiều chuyên gia đánh giá cao. Tuy nhiên, phương pháp này không thực sự có nhiều ý nghĩa trong việc phát hiện sự lây nhiễm của botnet.
II. Phát hiện dựa trên giám sát và phân tích lưu lượng mạng
Phương pháp này dựa trên việc theo dõi và phân tích lưu lượng mạng mang lại nhiều kết quả trong việc xác định sự tồn tại của các botnet. Có nhiều lưu lượng mạng có thể theo dõi để phát hiện botnet, ví dụ như DNS, Netflow…Các kĩ thuật chính trong phương pháp này là: dựa trên chữ ký, dựa trên bất thường.
1. Dựa trên chữ ký
Một khi botnet được phát hiện, các nhà nghiên cứu sẽ cố gắng phân tích mã và hành vi của bot để tạo ra chữ ký, sau đó chữ ký này có thể được sử dụng bởi một hệ thống phát hiện xâm nhập (IDS). Chữ ký ở đây là một bộ sưu tập thông tin có chứa tất cả các chi tiết liên quan về sự lây nhiễm hay các truyền thông độc hại. Nó gồm các thông tin như tên tệp tin, các URL, một chuỗi các bit hoặc bất kỳ thông tin nào có ích trong việc phát hiện botnet. IDS sau đó sẽ kiểm tra nội dung và tăng cường cảnh báo bất cứ khi nào phát hiện một chữ ký khớp. Hệ thống phát hiện xâm nhập mã nguồn mở Snort là ví dụ điển hình cho trường hợp này.
Chữ ký được thu thập dựa trên thông tin thu thập được từ botnet, vì vậy nên nó chỉ hiệu quả đối với các botnet đã biết. Với các botnet mới, phương pháp này sẽ không phát huy được tính hiệu quả của nó.
2. Dựa trên bất thường
Phát hiện botnet thông qua việc phân tích sự bất thường trong lưu lượng mạng bao gồm độ trễ, sự xuất hiện lưu lượng mạng trên các cổng bất thường hay hệ thống đột ngột nhận được nhiều gói tin hơn dữ kiến. Tất cả đều có thể là dấu hiệu của botnet xuất hiện trong mạng. Phương pháp này có thể chia thành các kỹ thuật sau:
- Dựa trên máy chủ: Một số kỹ thuật dựa trên máy chủ được thực hiện bằng việc theo dõi và phân tích bên trong của một hệ thống máy tính thay vì lưu lượng mạng được hiển thị bên ngoài gao diện. Trong phương pháp này, các máy tính cá nhân trong hệ thống được theo dõi để tìm ra bất kỳ hành vi đáng ngờ nào, bao gồm việc truy cập vào tệp không hợp lệ hay khả năng xử lý của nó. Nếu phát hiện hoạt động đáng này, hệ thống phát hiện xâm nhập máy chủ sẽ thông báo cho người dùng hoặc quản trị viên. Nếu các tệp quan trọng trên hệ thống bị sửa đổi hoặc xóa, một cảnh báo sẽ được gửi tới quản trị viên để điều tra.
- Dựa trên giám sát: kĩ thuật này được chia thành hai loại là giám sát chủ động và giám sát thụ động.
+ Giám sát chủ động: Ý tưởng cho kỹ thuật này đó là tiêm các gói thử nghiệm vào mạng, máy chủ hoặc ứng dụng để tìm hoạt động đáng ngờ có thể gây ra bởi con người hoặc bot, chẳng hạn như BotProbe. Kỹ thuật này cho thấy mức độ hiệu quả của việc phát hiện botnet dựa trên IRC.
+ Giám sát thụ động: Giám sát và phát hiện các giao tiếp bất thường trong mạng trong thời gian dài. Phương pháp này tận dụng mô hình giao tiếp giống nhau được sử dụng bởi các bot trong cùng một botnet, ở cả kiến trúc tập trung hoặc phi tập trung. Để tăng hiệu quả, các chuyên gia cũng áp dụng thêm các phương pháp như lý thuyết đồ thị, chia cụm, học máy hay phân tích nhóm.
- Dựa trên giao thức:
+ Giao thức IRC: là giao thức từng được sử dụng rất nhiều bởi các botnet đời đầu, vì vậy phương pháp phát hiện botnet trên giao thức này được giới thiệu từ rất sớm. Phương pháp này tập trung vào việc giám sát các giao tiếp IRC, và phân tích sự tương quan giữa các gói tin mạng thu được và các gói tin mẫu của botnet. Ngoài ra, giải pháp phát hiện botnet trên IRC dựa trên chữ ký cũng là một phương pháp đáng chú ý. Nó có thể phát hiện các IRC nickname và máy chủ IRC đáng ngờ cũng như các cổng bất thường được mở.
+ Giao thức SMTP: được các botnet sử dụng để thực hiện spam với số lượng lớn. Các botnet được tạo ra với mục đích để spam được gọi là spambot. Để phát hiện spambot, công cụ BotMagnifier [10] ra đời. Nó sử dụng các bộ dữ liệu từ DNSBLs (Domain Name System based Blackhole List) và log của spamhaus để phát hiện hành động spam của bot.
+ Peer-to-peer: Các kỹ thuật phát hiện botnet P2P thường sử dụng các số liệu mẫu của các máy tham gia vào giao tiếp P2P và tạo thành fingerprint. Fingerprint sau đó sẽ được sử dụng để so sánh lưu lượng mạng giữa P2P bình thường và P2P botnet.
III. Phát hiện dựa trên giám sát và phân tích DNS logs
Các kỹ thuật phát hiện botnet dựa trên DNS là sự kết hợp giữa hai phương pháp: dựa trên hành vi và dựa trên khai phá dữ liệu của lưu lượng DNS. Botmaster sử dụng DNS để quản lý botnet của mình. Hơn nữa, botmaster lợi dụng sự nhanh nhạy của DNS để ẩn náu và làm hỏng các nỗ lực phát hiện. Do đó, các truy vấn DNS được thực hiện trong suốt vòng đời của botnet và có thể được sử dụng để phân biệt các truy vấn DNS botnet từ các truy vấn DNS hợp lệ.
Năm 2005, Dagon đã đề xuất một cơ chế xác định máy chủ C&C bằng cách phát hiện các tên miền có tỉ lệ truy vấn DDNS (Dynamic DNS - phương thức ánh xạ tên miền tới địa chỉ IP có tần suất thay đổi cao) cao hoặc bất thường. Kỹ thuật này tương tự như phương pháp được đề xuất bởi Kristoff năm 2004. Tuy nhiên, cả hai kỹ thuật này đều có thể dễ dàng trốn tránh bằng cách sử dụng các truy vấn DNS giả mạo. Hơn nữa, kỹ thuật này tạo ra tỉ lệ dương tính giả khá cao do phân loại sai các tên miền hợp pháp sử dụng DNS với thời gian sống ngắn.
Năm 2006, Schonewille và Van Helmond đã đưa ra một cách tiếp cận khác, dựa trên tỉ lệ trả lời định kỳ bất thường của các NXDomain (Non-Existent Domain). Để phân loại các tỉ lệ trả lời bất thường, họ sử dụng các thuật toán tương tự như các thuật toán mà Dagon đã sử dụng. Theo quan sát của họ, những NXDomain thường là những máy chủ CnC đã bị các cơ quan chức năng gỡ xuống. Các máy tính nhiều lần gửi yêu cầu truy vấn đến đó có thể là một bot hoặc đã bị lây nhiễm. Phương pháp này rất hiệu quả để phát hiện một số tên miền đáng ngờ và có thể có tỉ lệ dương tính giả thấp hơn.
Ramachandran và cộng sự đã đề xuất một phương pháp xác định botnet bằng cách phân tích lưu lượng tra cứu DNSBL (DNS-based Black-hole List). Mục tiêu của phương pháp này là phân biệt các truy vấn DNSBL do các botmaster gửi đến trong số những lưu lượng DNSBL hợp pháp để xác định các đối tượng đáng ngờ có khả năng là bot. Phương pháp này có thể được sử dụng cho các hoạt động trinh sát trong thời gian thực. Các botmaster thường thực hiện hành vi tra cứu trước khi sử dụng các bot trong cuộc tấn công, do đó các thông tin phản hồi DNSBL có thể được sử dụng để đưa ra các cảnh báo sớm. Hơn nữa, kỹ thuật này không đòi hỏi phải liên lạc trực tiếp với bất cứ thành phần nào của botnet và không làm gián đoạn hoạt động của botnet. Tuy nhiên, kỹ thuật này cũng có nhiều rủi ro về cảnh báo dương tính giả, và không thể phát hiện được các cuộc trinh thám dò xét phân tán.
Năm 2007, Choi và cộng sự đã đề xuất một cơ chế phát hiện botnet mới dựa trên sự bất thường bằng cách giám sát các hoạt động nhóm trong lưu lượng DNS. Họ cũng phát triển một cơ chế cho phép phát hiện việc di chuyển máy chủ C&C. Phương pháp này mạnh mẽ hơn các phương pháp trước đó, và nó có thể phát hiện nhiều loại botnet, trong đó có cả các botnet sử dụng các kênh đã được mã hóa vì nó sử dụng các thông tin trong tiêu đề IP. Tuy nhiên, nhược điểm lớn nhất của phương pháp này là thời gian xử lý cao, nhất là đối với việc giám sát một mạng lưới lớn.
Ngoài ra cũng còn nhiều đề xuất khác cho phương pháp phát hiện botnet dựa trên DNS. Trong đó có phương pháp dựa trên học máy.
Hầu hết các botnet đều sử dụng DGA (Domain Generation Algorithms) để liên lạc với botmaster. Các chuyên gia bảo mật phải dịch ngược mã nguồn của bot và tách thuật toán DGA để tìm nguyên lý hoạt động. Đối với các botnet dạng này, ta có thể dùng học máy để dự đoán các tên miền được tạo ra bởi DGA bằng cách phân tích truy vấn DNS.
Bạn có thể tìm hiểu thêm về botnet ở đây
I. Install Docker On Ubuntu 18.04
- Truy cập vào server và cài các gói dịch vụ cần thiết:
sudo apt-get update
sudo apt-get install curl apt-transport-https ca-certificates software-properties-common
Bây giờ chúng ta thêm Repositories Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
Đảm bảo rằng bạn đang cài từ Docker repo thay vì Ubuntu repo bằng lệnh sau:
apt-cache policy docker-ce
Giờ chỉ cần dùng lệnh apt để install Docker lên Ubuntu
sudo apt-get install docker-ce
Kiểm tra tình trạng docker sau khi cài:
sudo systemctl status docker
À mình dùng cả docker compose nữa nên mình sẽ cài thêm bằng lệnh sau:
sudo apt-get install docker-compose
II. Dockerizing a React App with Nginx
- Đầu tiên chuẩn bị project reactjs.
1. Build Image
- Để dockerize một project trước hết chúng ta cần phải cấu hình Dockerfile để định nghĩa Image với môi trường và những thứ cần thiết cho project.
Cấu hình Dockerfile
File .dockerignore
File docker-compose.yml
Đặt tên cho ứng dụng mình. Đề cập tới Dockerfile sử dụng. Mapping port 80 với port 80 của ứng dụng. ( port 80 bên trái là port của server - môi trường gốc, port 80 bên phải là port của container).
Giờ ta chỉ cần run container
docker-compose up
Chạy nền thì sử dụng: docker-compose -d up
Vậy là mình đã sử dụng docker để deploy react app lên server sử dụng công nghệ ảo hóa.
Lợi ích:
- Docker cho bạn môi trường mục tiêu cụ thể.
- Môi trường trong docker độc lập với môi trường gốc ( không bị xung đột, phụ thuộc lẫn nhau).
- Docker có nhiều tiện tích đi kèm ( Kubernetes: tự động scale, tự động deploy, tự động và tự động)
- .......
III. Docker
- Khái niệm: Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux và Windows vào trong các container ảo hóa. Docker cung cấp một lớp trừu tượng và tự động ảo hóa dựa trên LinuxDocker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux và Windows vào trong các container ảo hóa. Docker cung cấp một lớp trừu tượng và tự động ảo hóa dựa trên Linux.
- Docker có hai khái niệm chính cần hiểu, đó là image và container.
1. Image
- Image sẽ định nghĩa cho 1 môi trường và những thứ có trong môi trường đó. Ứng dụng của ta muốn chạy được thì cần phải có Image.
Ví dụ: trong image có thể định nghĩa các thành phần: Ubuntu, Mysql,...
- Để tạo Image ta cần tạo một Dockerfile.
Một số lệnh trong Dockerfile:
FROM <base_image>:<phiên_bản>: đây là câu lệnh bắt buộc phải có trong bất kỳ Dockerfile nào. Nó dùng để khai báo base Image mà chúng ta sẽ build mới Image của chúng ta.
MAINTAINER <tên_tác_giả>: câu lệnh này dùng để khai báo trên tác giả tạo ra Image, chúng ta có thể khai báo nó hoặc không.
RUN <câu_lệnh>: chúng ta sử dụng lệnh này để chạy một command cho việc cài đặt các công cụ cần thiết cho Image của chúng ta.
CMD <câu_lệnh>: trong một Dockerfile thì chúng ta chỉ có duy nhất một câu lệnh CMD, câu lệnh này dùng để xác định quyền thực thi của các câu lệnh khi chúng ta tạo mới Image.
ADD <src> <dest>: câu lệnh này dùng để copy một tập tin local hoặc remote nào đó (khai báo bằng <src>) vào một vị trí nào đó trên Container (khai báo bằng dest).
ENV <tên_biến>: định nghĩa biến môi trường trong Container.
ENTRYPOINT <câu_lệnh>: định nghĩa những command mặc định, cái mà sẽ được chạy khi container running.
VOLUME <tên_thư_mục>: dùng để truy cập hoặc liên kết một thư mục nào đó trong Container.
WORKDIR: Thiết lập thư mục đang làm việc cho các chỉ thị khác như: RUN, CMD, ENTRYPOINT, COPY, ADD,…
EXPOSE: khai báo port lắng nghe của image
Câu lệnh build image:
docker build -t “name image” .
Ở cuối có 1 dấu "chấm" ý bảo là Docker hãy build Image với context (bối cảnh) ở folder hiện tại này. Và Docker sẽ tìm ở folder hiện tại Dockerfile và build.
Để show: docker images
Xóa image: docker rmi “mã image”
2. Container
- Container: Tương tự như một máy ảo, xuất hiện khi mình khởi chạy image.
docker container run -p port:port “name images”
-p port:port ( port trái là port môi trường gốc, port phải là port của container
Truy cập vào container và gắn terminal bash vào nó
docker exec -it <container id> /bin/bash
Sau một thời gian vắng bóng, mình đã quay trở lại rồi đây, haha....
Gần đây, mình cũng setup mysql trên server nên tiện viết blog về nó này luôn. Ok, vào việc luôn nhỉ.
1. Cài mysql trên server CentOS 7
- Update hệ thống: sudo yum update
- Cài MySQL repositories:
wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
- Cài đặt MySQL:
sudo rpm -Uvh mysql57-community-release-el7-9.noarch.rpm
- Ok, yum thôi:
sudo yum install mysql-server
Khởi động mysql:
sudo systemctl start mysqld
Check mysql:
sudo systemctl status mysqld
2. Cài mysql trên server Ubuntu
- Update hệ thống và cài mysql
sudo apt update
sudo apt install mysql-server -y
- Kiểm tra trạng thái mysql
sudo systemctl status mysql
Phía trên là 2 cách cài mysql. Sau khi cài xong thì mình còn phải setup bảo mật cho mysql (tức đặt mật khẩu cho root).
Với Centos thì bạn có thể dùng lệnh này để đặt mật khẩu cho root theo từng bước của nó: sudo mysql_secure_installation
3. Tạo một user mới và cấp quyền
- Chúng ta thường thao tác với database với đầy đủ các quyền, nhưng nhiều trường hợp chúng ta không muốn ai đó truy cập với quá nhiều quyền trong tay ( quá nguy hiểm quá ).
- Truy cập mysql: mysql -u root -p
- Tạo user mới:
Hiển thị toàn bộ databases: mysql> SHOW DATABASES; Tạo database: mysql> CREATE DATABASE mydatabase; Sử dụng một database: mysql> USE mydatabase; Xóa một database: mysql> DROP DATABASE mydatabase; Update cần tắt safe, update xong bật lại; SET SQL_SAFE_UPDATES = 0; UPDATE SET SQL_SAFE_UPDATES = 1;
I. Giới thiệu về Botnet.
1. Botnet là gì?
- Botnet thuật nghữ đầy đủ là "Bots network" dùng để chỉ một mạng lưới các máy tính bị chi phối và bị điều khiển từ xa bởi một máy tính khác. Botnet cũng có thể hiểu là một tập hợp các bot hoặc các con bot hoạt động một cách tự chủ.
Thông thường, một hệ thống botnet thường bao gồm các thành phần sau:
- Botmaster: là kẻ nắm quyền điều khiển các máy chủ C&C đưa ra lệnh cho các bot trong botnet.
- Command and Control Server (C&C Server): là máy chủ điều khiển các bot. Máy chủ này được dùng để phát ra các lệnh cho các bot trong mạng.
- Bot: là các máy tính bị xâm nhập, bị cài phần mềm độc hại và chịu sự điều khiển của C&C Server.
2. Các dạng botnet.
- Để phân loại botnet thì có thể phân loại dựa theo theo kiến trúc (kiến trúc tập trung, kiến trúc P2P, không cấu trúc), theo giao thức truyền thông (IRC, HTTP, P2P, DNS) hoặc theo cấu trúc liên kết (Topology).
- Ở đây, mình sẽ phân loại botnet dựa trên cấu trúc liên kết Topology. Các topology khác nhau sẽ có những ảnh hưởng khác nhau đến độ phức tạp, độ trễ tin nhắn hay khả năng bị phát hiện của botnet. Ngoài ra, các topology có thể được tổ chức tập trung quanh một hoặc nhiều máy chủ C&C hoặc được tổ chức theo cơ chế phân tán không sử dụng máy chủ C&C. Các dạng botnet topology điển hình bao gồm: Star, Mutile-Server, Hierarchical và Random.
* Star Topology
- Dạng botnet này bao gồm một trung tâm C&C ở trung tâm giao tiếp với toàn bộ các bot. Mỗi bot sẽ nhận các chỉ thị trực tiếp từ server. Khi một máy tính bị xâm nhập, nó sẽ tự đăng ký với server C&C trung tâm và trở thành một phần của botnet.
Mục tiêu |
Độ phức tạp thiết kế |
Khả năng bị phát hiện |
Tốc độ lây nhiễm |
Số lượng thiết bị lây nhiễm |
Hệ điều hành |
Trung bình |
Cao |
Thấp |
Lớn |
Ứng dụng |
Trung bình |
Trung bình |
Trung bình |
Trung bình |
Dịch vụ |
Cao |
Thấp |
Cao |
Nhỏ |
Con người |
Thấp |
Trung bình |
Thấp |
Lớn |