Kết quả bảo mật nghe lén bằng TLS và SRTP

Một phần của tài liệu bảo mật hệ thống call center (Trang 147)

2

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

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)

Sau khi đã cấu hình iptables thì sau khi nhấn Start thì server chỉ nhận một gói SYN duy nhất và DROP tất cả

CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG

Sau 1 phút server bắt đầu nhận gói tin SYN tiếp theo và với tốc độ được hạn chế, vì thếđảm bảo an toàn được cho server

Hình 6. 14: Bắt đầu nhận gói SYN sau 1 phút Sau đó vẫn tiếp tục nhận gói tin với tốc độ bị hạn chế rất nhiều

CHƯƠNG 6: KẾT QUẢ DEMO BẢO MẬT HỆ THỐNG Nhận xét:

Dù đây là tool ĐoS SYN FLood mạnh và nguy hiểm, mặc dù không thể

chặn hoàn toàn vì tính chất nguy hiểm của ĐoS nhưng hệ thống đã hạn chế tầm

ảnh hưởng của nó bằng cách giảm tốc độ truyển và hạn chế số lượng gói tin. Điều này chứng tỏ hệ thống đã Anti SYN Flood

6.2.2 Fail2 Ban

Sau khi cấu hình xong restart lại hệ thống. Dùng softphone 3CX register vào hệ thống

Cốý đăng nhập sai mật khẫu 4 lần và xem hiện tượng

Hình 6. 16: Đăng nhập sai pass và ban IP

Và đến lần thứ 5 không register được nữa vì IP đã bị ban và phải chờ hết thời gian bantime mới register lại được.

CHƯƠNG 7: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI

CHƯƠNG 7: KT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI

7.1 Kết luận

Dưới sựhướng dẫn tận tình của giáo viên hướng dẫn cùng với sựgiúp đỡ nhiệt tình của các giáo viên trong bộ môn ĐTVT đã tạo điều kiện về cơ sở vật chất để

nhóm thực hiện đề tài có thể hoàn thành đề tài “Bảo mật hệ thống Call Center”

đúng thời hạn đề rạ

Dưới đây là những gì mà nhóm thực hiện đềtài đã làm được trong thời gian quạ

7.1.1 Phần lý thuyết

 Nghiên cứu tổng quan vềAsterisk như các chức năng, các mô hình ứng dụng, cú pháp câu lệnh,….

 Tìm hiểu về cách cấu hình hệ thống Callcenter dựa trên các module sẵn có, ngoài ra còn ứng dụng PHP và MySQL vào đểtăng khả năng tùy biến và tính linh hoạt của Asterisk.

 Hiểu được các giao thức báo hiệu trong VoIP như SIP.

 Nắm được cách thức truyền thoại qua mạng IP.

 Nghiên cứu vềMySQL & PHPMyadmin để xuất ra tập tin CDR cung cấp chi tiết cuộc gọi để tiện cho việc quản lý.

 Tìm hiểu về các chức năng cần có của một hệ thống IP Call Center như khả năng phân phối cuộc gọi, tương tác phím nhấn, khả năng giám sát, ghi âm

cuộc gọi, nghe xen để theo dõi quá trình làm việc của agent…

 Cấu hình được tổng đài nội bộ PBX với các chức năng cơ bản như: hiển thị số

thuê bao chủ gọi, nhấc máy từ xa của một thuê bao khác đang rung chuông,

call transfer, call parking, call forwarding, chống cuộc gọi quấy rối(DND), conference, voicemail.

 Tình hiểu về các lổ hỏng và các hướng tấn công vào hệ thống. Từ đó nghiên

cứu và đề ra các giải pháp bảo mật cho hệ thống.

 Tìm hiểu lý thuyết về các Tool tấn công và hiểu được cô chế tấn công của mỗi Tool

 Nghiên cứu về TLS, SRTP, IPTABLES, FAIL2BAN áp dụng cho việc bảo mật cho hệ thống.

CHƯƠNG 7: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 7.1.2 Phần thực hành

Phương thức bảo mật gồm 2 phần: Anti Nghe Lén và Anti Đos

Chống Nghe Lén

 Sử dụng WireShark và Cain bắt được gói tin, phân tích gói tin và nghe lén

được cuộc gọị

 Cấu hình được TLS, SRTP chống nghe lén thành công.

Anti ĐoS

 Test các Tool hack vào một máy ảo và ĐoS thành công  Cấu hình được FAIL2BAN, IPTABLES Anti ĐoS

7.2 Hướng phát triển đề tài

Do thời gian có hạn nên nội dung luận văn chỉ mới đề cập đến một vài giải pháp bảo mật cho hệ thống cơ bản nhất là IP Call Center. Nếu có thêm thời gian nghiên cứu thì nhóm thực hiện đề tài sẽ phát triển thêm:

 Đểđề tài có thểứng dụng trong thực tiễn nhiều hơn thì nhóm thực hiện đề tài mở rộng thêm nhiều chức năng hơn nữa để từđó xây dựng nên một hệ thống Contactcenter. Bởi vì nếu Callcenter là hình thức giao tiếp qua điện thoại là chủ yếu thì Contactcenter là sự kết hợp thống nhất giữa các phương thức

tương tác với khách hàng, từ điện thoại, email, website, fax cho đến hình thức chat(đối thoại trực tiếp) hay gửi tin nhắn tức thời(instant messaging).  Ưu điểm vượt trội của Contactcenter so với Callcenter là cho phép kiểm soát

tương tác giữa khách hàng với doanh nghiệp một cách toàn diện, chẳng hạn

như công nghệ tại một Contactcenter giúp kiểm soát quá trình khách hàng truy cập website, tìm kiếm thông tin, từ đó có những giải pháp cải thiện, nâng cao chất lượng phục vụ khách hàng.

 Nghiên cứu về Kỹ thuật leo thang đặc quyền dựa vào lỗi nhân hệđiều hành (Linux Kernel Exploit)

 Đề tài chỉ mới đưa ra giải pháp bảo mật theo hướng tấn công từ mạng LAN vào hệ thống. Hướng phát triển là sẽ bảo mật cho hệ thống trước khả năng

tấn công từ mạng WAN. Đồng thời đưa ra giải pháp bảo mật chặn những kỹ

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

PH LỤC B: CODE CHƯƠNG TRÌNH

Khai báo kênh SIP

Trong file /etc/asterisk/sip.conf cấu hình như sau:

[testcarrier] disallow=all allow=ulaw type=friend username=testcarrier secret=test host=dynamic dtmfmode=rfc2833 context=trunkinbound [2222] username = Binh secret = 2222 accountcode=2222 context = group1 type = friend host = dynamic mailbox=2222@default [3333] username = Phuong secret = 3333 context = group1 accountcode=3333 type = friend host = dynamic mailbox=3333@default [200] type=friend username=BMDTVT host=dynamic secret=12345 qualify=yes disallow=all allow=gsm allow=ulaw allow=alaw context=group1 mailbox=200@hopthu

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO [201] type=friend username=BMDTCN host=dynamic secret=12345 disallow=all allow=gsm allow=ulaw allow=alaw context=group1 mailbox=201@hopthu qualify=yes [202] type=friend username=BMCSKTDT host=dynamic secret=12345 call-limit=1 disallow=all allow=gsm allow=ulaw allow=alaw context=group1 mailbox=202@hopthu qualify=yes

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO Trong extensions.conf: [trunkinbound] exten => _X.,1,Answer() exten => _X.,2,Set(COUNT=0) exten => _X.,3(ct1),Background(welcome)

exten => _X.,4,Set(COUNT=$[${COUNT}+1]); tang bo dem

exten => _X.,5,GotoIf($[${COUNT}=3]?ct:ct1); phat du 3 lan chua exten => _X.,6(ct),playback(goodbye)

exten => #,1,Playback(invalid); "Thanks for trying the demo" exten => #,2,Hangup; Hang them up.

exten => t,1,Goto(#,1); If they take too long, give up

exten => i,1,Playback(invalid); "That's not valid, try again"

;NHAY DEN CAC NGU CANH TUONG UNG exten => 1,1,Goto(tuition,s,1)

exten => 2,1,Goto(average_score,s,1) exten => 3,1,Goto(learning_schedual,s,1) exten => 4,1,Goto(consulted,s,1)

;TRA CUU HOC PHI [tuition]

exten => s,1,AGI(hoc_phi_1.php) exten => s,2,Hangup()

;TRA CUA DIEM TRUNG BINH [average_score]

;exten => s,1,AGI(welcome_averagẹphp) exten => s,1,AGI(average_mark.php) exten => s,2,Hangup()

; XEM VA XAC NHAN LICH HOC [learning_schedual]

exten => s,1,Answer()

exten => s,2,AGI(learning_schedual.php) exten => s,3,Hangup()

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

;GAP NHAN VIEN TU VAN [consulted] exten => s,1,Answer() ;exten => s,2,AGI(tuvan.php) exten => s,n,SetMusicOnHold(default) ;exten => s,n,Macro(recording) exten => s,n,MixMonitor(${STRFTIME(${EPOCH},,%d-%m- %Y_%H:%M:%S)}-${EPOCH}.wav) exten => s,n,Queue(tuvan|tT|||60) exten => s,n,Voicemail(u2222) include=>parkedcalls include=>DND include=>Parked include=>Meetme include=>meetme-all include=>pickup include=>mailbox include=>F_INM include=>F_BSY include=>F_NSWR include=>trunkinbound include=>local_analog include=>local_IAX include=>local_SIP include=>agent include=>chanspy

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

Ngữ cảnh cho các extension nội bộ trong Asterisk PBX Trong Agent.conf agent => 3333,3333,Phuong agent => 2222,2222,Binh Trong musiconhold.conf [default] mode = files directory = /var/lib/asterisk/default random = yes Trong queuẹconf [tuvan] music = default strategy = ringall timeout = 15 retry = 2 maxlen = 0 wrapuptime=10 ;announce-frequency = 10 ;announce-holdtime=yes ;joinempty=yes member => Agent/2222,1 member => Agent/3333,2

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO Code PHP Hoc_phịphp #!/usr/bin/php -q <?php require 'phpagịphp'; $agi= new AGI(); $agi->answer(); mysql_connect("localhost","root","thaiphi"); mysql_select_db("asterisk"); $i=0; $keys = null; while($i<3){

$agi->text2wav("Please enter your I D and then press the pound key when you have done");

$result = $agi->get_datắbeep', 3000, 20); $keys = $result['result']; $i++; if($keys){ break; } }

if($i==3 and $keys== null){

$agi->text2wav(" Time is over! Goodbye and see you later!"); $agi->hangup();

}

$row=mysql_query("select mssv, ho_ten, tong_hoc_phi, hp_da_nop, hp_con_no from sinhvien where mssv='$keys'");

$rows = mysql_fetch_array($row); $agi->text2wav("you entered $keys"); if($keys == $rows['mssv']){

$agi->text2wav("Hello {$rows['ho_ten']}");

$agi->text2wav("Your total tuition is {$rows['tong_hoc_phí]}"); $agi->text2wav("You have paid {$rows['hp_da_nop']}");

$agi->text2wav("And the remain tuition you have not paid, is {$rows['hp_con_nó]}");

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

$keys=null; $j=0;

while($j<3){ $keys1=null;

$agi->text2wav("press 1 to continue checking with another, I, D, press 0 to quit, and press 9 return main menu");

$agi->exec('Read', 'myvar||1|||5'); $myvar = $agi->get_variable(myvar); $data = $myvar['datá];

$j++; if($j==3){

$agi->text2wav(" Time is over! Goodbye and see you later!"); $agi->hangup();

}

if($j<3 and $data!=null){

$agi->text2wav("You entered $data"); break; } } if($data==0){ $data = null;

$agi->text2wav("Thank you for using this service, goodbye"); $agi->hangup(); } elseif($data==9){ $data = null; $agi->exec("goto","main_menu|1080|1"); } elseif($data==1){ $i=0; $data=null; $agi->exec("goto","tuition|s|1"); break;

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

}

elseif($data!=1 && $data!=0 && $data!=9){ $agi->text2wav("The key you entered is not valid"); $agi->text2wav(" goodbye");

} } else{

$agi->text2wav("The key you entered is not valid, please try again"); $agi->exec("goto","tuition|s|1"); } ?> Learning_schedual.php #!/usr/bin/php -q <?php require 'phpagịphp'; $agi = new AGI(); $agi->answer(); mysql_connect("localhost","root","thaiphi"); mysql_select_db("asterisk"); $i=0; $keys = null; while($i<3){

$agi->text2wav("Please, enter your I D and then press the pound key when you have done");

$result = $agi->get_datắbeep', 3000, 20); $keys = $result['result']; $i++; if($keys){ break; } } if($i==3){

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

$agi->hangup(); }

$row=mysql_query("select mssv, ho_ten, lop, registered from sinhvien where mssv='$keys'");

$rows = mysql_fetch_array($row); $i=0;

$agi->text2wav("you entered $keys"); if($keys == $rows['mssv']){

$lop = $rows['lop'];

$row1=mysql_query("select code_subject, name_subject from learning_schedual where learning_schedual.lop = $lop"); $num_rows1 = mysql_num_rows($row1);

$agi->text2wav("Hello {$rows['ho_ten']}, In this semester, you have total $num_rows1 subjects, in your schedual");

$keys=null; $j=0; $temp=0; while($rows1 = mysql_fetch_array($row1)){ $temp++; $agi->text2wav("$temp"); $agi->text2wav("{$rows1['name_subject']}"); } if($rows['registered'] == 1){ $keys=null;

$agi->text2wav("You authenticated your learning schedual before"); $k=0;

while($k<3){ $keys=null;

$agi->text2wav("Please press 9 to return main menu, and press 0 to quit"); $agi->exec('Read', 'myvar||1|||3'); $myvar = $agi->get_variable(myvar); $keys = $myvar['datá]; $k++; if($k==3){

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

$agi->text2wav("Time is over, goodbye and see you later"); $agi->hangup();

}

if($keys!=null &&$k<3){

$agi->text2wav("You entered $keys");

break; } } if($keys ==9){ $agi->exec("goto","main_menu|1080|1"); break; } if($keys == 0){

$agi->text2wav("Thank you for using this service, goodbye and see you later"); $agi->hangup(); } } else{ while($j<3){ $keys=null;

$agi->text2wav("Press 1 to authenticate, press 0 to quit, and press 9 to return main menu");

$agi->exec('Read', 'myvar||1|||3'); $myvar = $agi->get_variable(myvar); $keys = $myvar['datá]; $j++; if($j==3){

$agi->text2wav(" Time is over! Goodbye and see you later!"); $agi->hangup();

}

if($j<3 and $keys!=null){

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO $agi->exec("SayDigits","$keys"); break; } } if($keys == 1){ $keys = null;

$sql = "UPDATE sinhvien SET registered = 1 WHERE mssv = {$rows['mssv']}";

mysql_query($sql);

$agi->text2wav("You have authenticated successfull"); $sql1 = "INSERT into registered( mssv, ho_ten, lop) values ('{$rows['mssv']}', '{$rows['ho_ten']}', '{$rows['lop']}')";

mysql_query($sql1); $j=0;

while($j<3){

$agi->text2wav("To return main menu, please press 9"); $agi->text2wav("To exit this service, plese press 0"); $agi->exec('Read', 'myvar||1|||3');

$myvar = $agi->get_variable(myvar); $keys = $myvar['datá];

$j++;

if($j==3 && $keys==null){

$agi->text2wav(" Time is over! Goodbye and see you later!");

$agi->hangup();

}

if($j<3 && $keys!=null){

$agi->text2wav("You entered $keys");

break;

}

}

if($keys != 9 && $keys!=0){

$agi->text2wav("The keys you entered is not valid"); $agi->text2wav("Goodbye and see you later"); $agi->hangup();

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

}

if($keys == 9){$agi->exec("goto","main_menu|1080|1");} if($keys == 0){

$agi->text2wav("Thank you");

$agi->text2wav("Goodbye and see you again");

break;

}

}

If ($keys==0){ $keys = null;

$agi->text2wav("Thank you for using this service, goodbye and see you later"); $agi->hangup(); } if($keys==9){ $keys = null; $agi->exec("goto","main_menu|1010|1"); break; }

if($keys!=1 && $keys!=0 && $keys!=9){

$agi->text2wav("The key you entered is not valid"); $agi->text2wav(" goodbye");

} } } else{

$agi->text2wav("The key you entered is not valid"); $agi->exec("goto","learning_schedual|s|1"); } ?> Average_scorẹphp #!/usr/bin/php -q <?php require 'phpagịphp';

PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO

$agi= new AGI(); $agi->answer(); mysql_connect("localhost","root","password"); mysql_select_db("asterisk"); $i=0; $keys = null; while($i<=3){

$agi->text2wav("Please enter your I, D and then press the pound key when you have done");

$result = $agi->get_datắbeep', 3000, 20); $keys = $result['result']; $i++; if($keys){ break; } }

if($i>3 and $keys==null){

$agi->text2wav(" Time is over! Goodbye and see you later!");

Một phần của tài liệu bảo mật hệ thống call center (Trang 147)

Tải bản đầy đủ (PDF)

(177 trang)