2
5.2.2.2 Bảo mật bằng SRTP
Kích hoạt SRTP
Muốn Asterisk hỗ trợ SRTP thì cần phải cập nhật thêm thư viện libsrtp, thư
viện này cần phải được cài đặt trước khi cài đặt Asterisk, trong trường hợp này vì
Asterisk đã được cài đặt đểdemo các trường hợp trước nên sau khi cài libsrtp,phải cài đặt lại Asterisk, sau đó khai báo thuê bao, định hướng cuộc gọi trong các file
sip.conf và extensions.conf như đã trình bày ở các phần trên. Ngoài ra, để kích hoạt SRTP ở thuê bao nào thì ta thêm dòng encryption=yes và srtpenable=yes trong phần khai báo của thuê bao đó trong file sip.conf.
Cài đặt cho Blink sử dụng SRTP: Click vào Blink/Accounts/Manage Accounts, trong tab media, phần RTP options, chọn mandatory cho SRTP.
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG
Hình 5. 31: Cài đặt SRTP trên Blink
Tấn công cuộc gọi được bảo mật bởi SRTP
Tình huống cuộc gọi:
Hình 5. 32: Mô hình demo SRTP Cain & Able và Wireshark được đặt trên host của attacker
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG 5.3 Bảo mật hệ thống với Iptables và Fail2ban
Như đã đề cập ở chương 3, hướng tấn công ảnh hưởng băng thông và chất
lượng dịch vụ của hệ thống chính là DoS và ĐoS. Đó là dạng tấn công nguy hiểm có thể làm cho server bị sụp đổ hoàn toàn hoặc không thểđáp ứng dịch vụđược nữa (Từ chối dịch vụ).
Ở phần này sẽ demo cách sử dụng iptables và fail2ban để chặn hoặc giảm thiểu ảnh hưởng của các cuộc tấn công DoS và ĐoS.
5.3.1 Bảo mật hệ thống dùng Iptables 5.3.1.1 Cài đặt Iptables 5.3.1.1 Cài đặt Iptables
Kiểm tra Iptables đã được cài đặt chưa bằng lệnh:
# iptables -L
Với những máy chưa cài đặt Iptables thì dùng lệnh:
# apt-get install iptables
Nếu sau khi dùng lệnh iptables -L thấy hiện ra các Chain như hình sau tức là
iptables đã được cài đặt
Hình 5. 33: Kiểm tra cài đặt Iptables
Nếu Iptables đã được cài đặt thì start iptables bằng lệnh:
# service iptables start
Hoặc:
# /etc/init.d/iptables start
Để iptables tự start khi khởi động thì nên turn on iptables trong startup bằng lệnh:
# chkconfig iptables on
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG 5.3.1.2 Script Iptables Demo:
Sau khi cài đặt Iptables, tiến hành cấu hình iptables theo Script đã dựng sẵn. Tùy thuộc và mục đích của quản trị viên và vào tính chất của hệ thống mà Script được xây dựng sẽ khác nhaụ
Script này được xây dựng để chống các hướng tấn công sau: + Register bất hợp pháp SSH vào hệ thống + ICMP Flood + Syn Flood + Scan Port + UDP Flood + Ping of Death + Smurf + Fraggle >>> Xóa tất cả: # iptables -X
>>> Xóa các luật tồn tại trong Chain
# iptables -F
>>> Reset tất cả gói và Counter
# iptables -Z
>>> Không đóng các kết nối đang được thiết lập, đồng thời cũng cho phép mở các kết nối mới trong kết nối được thiết lập
# iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
>>> Chấp nhận 192.168.1.39 và 192.168.1.35 được phép register SSH vào hệ
thống. Chặn tất cả các IP còn lại
# iptables -A INPUT -s 192.168.1.35/32 -i eth0 -p tcp -m tcp --dport 2200 -m state - -state NEW -j ACCEPT
# iptables -A INPUT -s 192.168.1.39/32 -i eth0 -p tcp -m tcp --dport 2200 -m state - -state NEW -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp -m tcp --dport 2200 -m state --state NEW -j DROP
>>> Hạn chế gói tin Ping tới Server: rule này sẽ giới hạn các gói Ping tới server là
10 gói/phút sau khi đạt mức đỉnh là 1 gói
# iptables -N test
# iptables -A test -m limit --limit-burst 1 --limit 10/m -j RETURN # iptables -A test -j DROP
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG
# iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-request -j test
>>> Chống Syn Flood: rule này sẽ giới hạn các gói TCP (SYN = 1) tới server qua
port 3306 và 2200 là 1 gói/phút sau khi đạt mức đỉnh là 1 gói
# iptables -N syn_flood
# iptables -A syn_flood -m limit --limit 1/min --limit-burst 1 -j RETURN # iptables -A syn_flood -j DROP
# iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 --syn -j syn_flood # iptables -A INPUT -i eth0 -p tcp -m tcp --dport 2200 --syn -j syn_flood
>>> Chống UDP Flood: ngăn các gói UDP đến port UDP-echo (port 7)
# iptables -A INPUT -p udp --dport 7 -j DROP
>>> Chống Ping of Death: kỹ thuật Ping of Death gửi gói tin lớn hơn 65535 byte
làm tê liệt hệ thống nên rule này hạn chế kích cỡ của 1 gói tin ICMP dưới 65535, DROP các gói không thỏạ
# iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 60:65535 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
>>> Chống Smurf Attack: Rule này ngăn không cho Ping tới địa chỉ broadcast và giới hạn tốc độ các gói tin echo-reply là 10 gói/phút khi đạt 1 gói
# iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP
# iptables -A INPUT -p icmp --icmp-type echo-request -m pkttype --pkt-type broadcast -j DROP
# iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit-burst 1 --limit 10/m -j ACCEPT
>>> Chống Fraggle Attack: Rule này ngăn không cho các gói tin UDP gửi tới địa chỉ Broadcast
# iptables -A INPUT -p udp -m pkttype --pkt-type broadcast -j DROP # iptables -A INPUT -p udp -m limit --limit-birst 1 --limit 10/m -j ACCEPT
>>> Chống Scan Port
>>>>> Chống Xmas Scan (gửi gói tin với ba cờ được thiết lập FIN, URG, PSH)
# iptables -A INPUT -m state --state NEW -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
>>>>> Chống Xmas Scan với tất cả cờđược thiết lập
#iptables -A INPUT -m state --state NEW -p tcp --tcp-flags ALL ALL -j DROP
>>>>> Chống Null Scan (tắt tất cả cờ)
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG
Sau khi cấu hình Script xong, nếu trong quá trình test không có lỗi gì thì tiến hành save cấu hình lại bằng câu lệnh:
# iptables-save
Cách sửa cấu hình và reboot đã đề cập ởchương 4
Lệnh iptables-save chỉ tạm save lại cấu hình và khi restart lại hệ thống thì sẽ tự
dùng lệnh iptables-restore để đọc lại cấu hình nhưng khi reboot (tắt) và khởi động lại hệ thống thì cấu hình sẽ mất đị Để tránh mỗi lần mở máy phải cấu hình Script lại ta thực hiện các bước sau:
# pre-up iptables-restore < /etc/iptables.rules
# post-down iptables-restore < /etc/iptables.downrules # vi /etc/network/if-pre-up.d/iptablesload và thêm vào: # !/bin/sh
iptables-restore < /etc/iptables.rules exit0
# vi /etc/network/if-post-down.d/iptablessave và thêm vào # !/bin.sh iptables-save -c > /etc/iptables.rules if [ -f /etc/iptables.downrules ]; then iptables-restore < /etc/iptables.downrules fi exit 0 # chmod +x /etc/network/if-post-down.d/iptablessave # chmod +x /etc/network/if-pre-up.d/iptablesload # iptables-save > /etc/iptables.rules
Trước khi test demo nên restart lại hệ thống:
# /etc/init.d/networking restart
5.3.2 Bảo mật hệ thống dùng Fail2ban kết hợp Iptables 5.3.2.1 Cài đặt Fail2ban 5.3.2.1 Cài đặt Fail2ban
Fail2ban được tích hợp sẵn trong Ubuntu 11.04
Để bắt đầu cấu hình trước tiên phải cài đặt Fail2ban bằng câu lệnh:
# apt-get install fail2ban
5.3.2.2 Cấu hình
Cấu hình file asterisk.conf
Sau khi cài đặt fail2ban, tạo một tập tin có tên asterisk.conf trong thư mục fail2ban filters bằng lệnh:
# /etc/fail2ban/filter.d/asterisk.conf
Bây giờ thêm những phần sau đây vào tập tin vừa tạo: # Fail2Ban configuration file
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG
#
# $Revision: 250 $ #
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from # common.local
#before = common.conf
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the logfilẹ The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT #
failregex = NOTICẸ*.*: Registration from '.*' failed for '<HOST>' - Wrong password
NOTICẸ*.*: Registration from '.*' failed for '<HOST>' - No matching peer found NOTICẸ*.*: Registration from '.*' failed for '<HOST>' - Username/auth name mismatch
NOTICẸ*.*: Registration from '.*' failed for '<HOST>' - Device does not match ACL
NOTICẸ* <HOST> failed to authenticate as '.*'$
NOTICẸ*.*: No registration for peer '.*' \(from <HOST>\)
NOTICẸ*.*: Host <HOST> failed MD5 authentication for '.*' (.*) NOTICẸ*.*: Failed to authenticate user.*@<HOST>.*
# Option: ignoreregex
# Notes.: regex to ignorẹ If this regex matches, the line is ignored. # Values: TEXT
#
ignoreregex =
Trong dòng trên bạn có thể thấy rằng fail2ban sẽ tìm cụm từ: “Wrong password”, “No matching peer found”, “Username/auth name mismatch” and “Device does not match ACL”
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG
Hình 5. 34: Cấu hình asterisk.conf
Cấu hình file jail.conf
Tiếp theo thêm những dòng sau trong
# / etc/fail2ban/jail.conf
[asterisk-iptables] enabled = true filter = asterisk
action = iptables-allports[name=ASTERISK, port=all, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@examplẹorg] logpath = /var/log/asterisk/messages ignoreip = 192.168.1.(máy chủ) 192.168.1.39 maxretry = 3 bantime = 18000 [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG [ssh-đos] enabled = true port = ssh filter = sshd-đos logpath = /var/log/auth.log maxretry = 3
Hình 5. 35: Cấu hình file jail.conf
Cấu hình file logger.conf để Asterisk ngày đăng nhập và định dạng thời gian
Dùng lệnh
# /etc/asterisk/logger.conf
Và thêm phần sau đây trước phần [logfiles]. Điều này làm cho ngày và thời gian
được định dạng Năm-tháng-ngày giờ:phút [general]
dateformat=%F %T
Sau đó tải lại các mô-đun logger cho Asterisk, tại dòng lệnh nhập vào lệnh sau đây:
asterisk -rx "logger reload"
Bật và kiểm tra Fail2ban, Iptables
Bật Iptables
# /etc/init.d/iptables start
Bật Fail2ban
# /etc/init.d/fail2ban start
CHƯƠNG 5: DEMO BẢO MẬT HỆ THỐNG
# iptables -L -v
You should see something like the following for the INPUT chain (you will see more if you have other Fail2Ban filters enabled):
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
2104K 414M fail2ban-ASTERISK all — any any anywhere anywhere
If you do not seem something similar to that then you have some troubleshooting to, check out /var/log/fail2ban.log
Bật lên
# update-rc.d iptables defaults # update-rc.d fail2ban defaults
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG
6.1 Kết quả bảo mật nghe lén bằng TLS và SRTP 6.1.1 Kết quả bảo mật cuộc gọi bằng TLS 6.1.1 Kết quả bảo mật cuộc gọi bằng TLS
Sau khi tạo khóa cho cảServer và Client đồng nhất, tiến hành thực hiện cuộc gọi giữa tls1 và tls2.
Hình 6. 1: Cuộc gọi 2 extensions tls1 và tls2 Trong quá trình đàm thoại Wireshark vẫn bắt được các gói tin
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG
Các gói tin trong quá trình đàm thoại đã được TLS mã hóa thông tin nên khi Wireshark bắt được vẫn không nghe được cuộc gọị
Hình 6. 3: Cuộc gọi nghe lén bị mã hóa
6.1.2 Kết quả bảo mật cuộc gọi bằng SRTP
- Nghe lén bằng Wireshark:
Vì các bản tin báo hiệu không được mã hóa nên Wireshark nhận biết được có cuộc gọi vừa được tiến hành. Cuộc gọi SRTP không truyền trực tiếp giữa 2 Softphone mà gián tiếp qua server Asterisk, vậy nên Wireshark nhận dạng được 2 cuộc gọi:
192.168.1.34 <=> 192.168.1.43 và 192.168.1.43<=> 192.168.1.37
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG
Tuy nhiên khi nghe lại cuộc gọi này trên Wireshark thì ta chỉ nhận được các âm thanh nhiễu vô nghĩa, nguyên nhân là do các bản tin RTP đã được mã hóa, và
Wireshark đã không giải mã được các bản tin nàỵ
Hình 6. 5: Nghe lén cuộc gọi SRTP bằng Wireshark.
Như vậy SRTP bảo vệđược cuộc gọi khỏi tấn công nghe trộm, tuy nhiên các thông tin quan trọng trong các bản tip SIP vẫn có thể bị mất, tạo điều kiện cho các loại tấn công khác.
- Nghe lén cuộc gọi bằng Cain & Able
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG
Giống như Wireshark, Cain & Able cũng nhận dạng được 2 cuộc gọi vừa diễn ra, nhưng khi nghe lại 2 cuộc gọi này đều chỉ nhận được các âm thanh nhiễu vô nghĩạ
Cain & Able cũng không giải mã được các gói tin SRTP.
Như vậy SRTP đã bảo vệ được các cuộc gọi khỏi tấn công nghe trộm, tuy nhiên, các thông tin quan trọng về người sử dụng không được bảo mật, và có thể bị khai thác cho một số loại tấn công khác như tấn công vào cước phí chẳng hạn
6.2 Kết quả bảo mật hệ thống bằng Iptables và Fail2 Ban 6.2.1 Kết quả Demo khi test Script Iptables 6.2.1 Kết quả Demo khi test Script Iptables
6.2.1.1 Dùng cửa sổ lệnh cmd thử ping vào hệ thống:
Bất kì địa chỉ IP nào khi Ping tới hệ thống đề sẽ thấy hiện tượng gói ICMP bị hạn chế. Đó là do iptables đã hạn chế tốc độ và sốlượng gói ICMP tới hệ thống.
Hình 6. 7: Kết quả gởi gói tin Ping
Nhận xét:
Hệ thống đã có thể hạn chế số lượng và tốc độ các gói tin Ping chứng tỏ hệ
thống đã có thể chống lại ICMP Flood Attack
6.2.1.2 Dùng Putty register SSH vào hệ thống
Địa chỉ IP 192.168.1.35 đăng nhập thành công vào hệ thống SSH vì đã được iptables chấp nhận
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG Hình 6. 8: Đăng nhập putty
Hình 6. 9: Đăng nhập thành công
Địa chỉ IP 192.168.1.42 vẫn đăng nhập SSH đúng với IP của máy chủvà đúng port
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG Hình 6. 10: Đăng nhập IP 192.168.1.42
Hình 6. 11: Đăng nhập thất bại
Ngoài ra nên chỉnh sửa cấu hình trong fie sshd_config để hệ thống được bảo mật
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG
Chỉnh sửa trong file /etc/ssh/sshd_config
# only allow SSHv2 Protocol 2
# specify the keys for SSHv2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key # disallow root to login via SSH PermitRootLogin yes
#disconnect after 3 tries MaxAuthTries 3
#do strict checking on users homedir permissions StrictModes yes
# enable Authentication via RSA keys RSAAuthentication yes
PubkeyAuthentication yes
# specify the file with the public key for ourusers AuthorizedKaysFilẹssh/authorized_keys
# disable various “bad” options RhostsRSAAuthentication no HostbasedAuthentication no IgnoreUserKnownHosts yes IgnoreRhosts yes PasswordAuthentication no PermitEmptyPasswords no X11Forwarding no
# disable PAM anthentification (as we only use keys now) UsePAM no
# only allow login, if user is in group ‘ssh’ AllowGroups ssh
Nhận xét:
SSH là lĩnh vực cực kì quan trọng cần được bảo mật vì khi kẻ tấn công
register ssh vào được sẽ tìm cách chiếm quyền kiểm soát hệ thống. Nhờ cấu hình iptables cấm IP bất hợp pháp register hệ thống nên server luôn đứng vững bất chấp mọi cố gắng từ bất kì địa chỉ IP nàọ
6.2.1.3 Dùng Tool ĐoS SynFlood - Good Bye vs5.2 tấn công hệ thống vào port 2200 2200
Lúc đầu thực hiện ĐoS Syn Flood vào server tại địa chỉ 192.168.1.47 tại port 2200 khi chưa cấu hình iptables cho server sẽ thấy hiện tượng trong 20s gói tin SYN gửi liên tục, với tốc độ nhanh và sốlượng quá nhiểu chỉ trong thời gian ngắn sẽlàm tràn băng thông, hết tài nguyên và tê liệt hoàn toàn.
CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG
Hình 6. 12: Lượng gói tin đến server trong 20s (chưa cấu hình Iptables)