báo cáo môn học kỹ thuật lập trình đề tài ứng dụng an toàn socket programing

55 0 0
Tài liệu đã được kiểm tra trùng lặp
báo cáo môn học kỹ thuật lập trình đề tài ứng dụng an toàn socket programing

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Điều đó giúp giao thức TCP được ứng dụng chủ yếu trong những hoạt động cần độ chính xác cao như truyền tải trang web, truyền tải email, hay kho lưu trữ điện toán đám mây,… Ngược lại, gia

Trang 1

HỌC VIỆN KỸ THUẬT MẬT MÃKHOA AN TOÀN THÔNG TIN

-BÁO CÁO MÔN HỌCKỸ THUẬT LẬP TRÌNH

Đề Tài

Ứng Dụng An Toàn Socket Programing

Sinh Viên Thực Hiện :

Mai Hoàng Anh-AT180303 Nguyễn Duy Khánh-AT180325

Giảng Viên Hướng Dẫn:

GV:Bùi Việt Thắng

Khoa An toàn thông tin – Học viện Kỹ thuật mật mã

Trang 3

LỜI CẢM ƠN

Lời đầu tiên, nhóm chúng em xin chân thành gửi lời cảm ơn đến thầy NguyễnMạnh Thắng – giảng viên khoa An toàn thông tin trường Học viện Kỹ thuật MậtMã

đã tạo điều kiện cũng như cung cấp kiến thức, đồng thời đưa ra những lời khuyêncần thiết để chúng em có thể hoàn thành đề tài này.

Hà Nội, ngày 1 tháng 4 năm 2024

Trang 4

MỤC LỤC

MỤC LỤC 3

DANH MỤC CHỮ VIẾT TẮT 5

DANH MỤC BẢNG: Bảng 1.4 Chi tiết tham số của hàm socket() 18

Bảng 1.5: Phương thức dùng trong giao tiếp Client/Server 18

Bảng 1.6: Một số phương thức hỗ trợ thu thập thông tin 19

DANH MỤC HÌNH VẼ : Hình 1.1: Cấu trúc socket 7

Hình 1.2 Quá trình bắt tay 3 bước 12

Hình 1.3 Cơ chế hoạt động của stream socket 13

Hình 2.1 SSL Handshake 24

LỜI NÓI ĐẦU 6

Chương I: GIỚI THIỆU VỀ SOCKET PROGRAMING1.1 Tổng quan về Socket và mục đích của Socket Programing 7

1.4.2 Giới thiệu module socket trong Python 17

CHƯƠNG II - ỨNG DỤNG AN TOÀN SOCKET PROGRAMING 20

2.1 Các nguy cơ bảo mật trong Socket Programing 20

2.1.1 Thiếu xác thực trong quá trình bắt tay 20

2.1.2 Kênh TCP không được mã hóa 20

Trang 5

2.2 Các phương pháp bảo mật 21

2.2.1 Xác thực người dùng 21

2.2.2 Giao thức SSL/TLS 22

CHƯƠNG III – THỰC NGHIỆM 27

3.1 Tổng quan mô hình xây dựng bài toán 27

3.2 Tiến hành 27

3.2.1 Xác thực người dùng trong giao tiếp Client – Server 27

3.2.2 Triển khai giao thức SSL/TLS trong giao tiếp Client – Server 33

TÀI LIỆU THAM KHẢO 50

Trang 6

HMAC Hash-based Message Authentication CodeHTTP Hypertext Transfer Protocol

IETF Internet Engineering Task ForceIoT Internet of Things

IP Internet Protocol

NIST National Institute of Standards and TechnologyOWASP Open Worldwide Application Security ProjectSCP Secure Copy Protocol

SQL Structured Query LanguageSSL Secure Sockets LayerTLS Transport Layer SecurityTCP Transmission Control ProtocolUDP User Datagram Protocol

XSS Cross-site Scripting

Trang 7

LỜI NÓI ĐẦU

Trong thế giới kết nối mạng ngày nay, việc truyền dữ liệu qua mạng internetthông qua socket programming đã trở thành một phần không thể thiếu củacuộc sống hàng ngày và hoạt động kinh doanh Socket programming cung cấpkhả năng thiết lập kết nối giữa các thiết bị mạng từ xa, cho phép truyền dữliệu một cách linh hoạt và hiệu quả Tuy nhiên, điều quan trọng cần nhớ làviệc truyền dữ liệu qua mạng internet không chỉ đem lại lợi ích mà còn mở ranhiều rủi ro về an ninh thông tin

Trong một thế giới mà tin tặc luôn tìm cách tìm kiếm lỗ hổng để tấn công hệthống, việc bảo vệ dữ liệu trở nên cực kỳ quan trọng Socket programming,với tính linh hoạt và mạnh mẽ của nó, không nằm ngoài tầm ngắm của nhữngkẻ tấn công này Bất kỳ lỗ hổng nào trong ứng dụng có thể được lợi dụng đểxâm nhập vào hệ thống, đánh cắp dữ liệu quan trọng hoặc thậm chí là gây hạicho hệ thống

Bài báo cáo này sẽ đề cập đến những thách thức và giải pháp trong việc đảmbảo an toàn trong socket programming Bài này sẽ nói về các biện pháp bảomật cơ bản và nâng cao, từ việc sử dụng mã hóa dữ liệu đến cơ chế xác thựcvà kiểm soát truy cập Bằng cách hiểu rõ về những nguy cơ tiềm ẩn và ápdụng các kỹ thuật bảo mật phù hợp, người dùng có thể xây dựng những ứngdụng mạng an toàn và tin cậy, đóng góp vào sự phát triển bền vững củainternet và nền kinh tế số

Hy vọng rằng bài báo cáo này sẽ giúp độc giả có cái nhìn sâu sắc hơn về vấnđề an ninh mạng và truyền dữ liệu qua socket, đồng thời cung cấp cái nhìn vềcác biện pháp bảo mật hiện đại và tiên tiến nhất để đối phó với những tháchthức đó.

Trang 8

CHƯƠNG I – GIỚI THIỆU VỀ SOCKET PROGRAMING1.1 Tổng quan về Socket và mục đích của Socket Programing

1.1.1 Tổng quan

a Socket và lập trình Socket

Socket là một điểm cuối của liên kết giao tiếp hai chiều (two-way

communication) giữa hai chương trình đang chạy trên mạng Nó hoạt động nhưmột cánh cửa kết nối, cung cấp khả năng truyền dữ liệu giữa các chương trìnhvới nhau.

Lập trình Socket là một mô hình lập trình cho phép giao tiếp giữa các tiến trình(ứng dụng/chương trình) qua mạng Nó cho phép các tiến trình chạy trên cácmáy

tính khác nhau trao đổi dữ liệu.b Cấu trúc

Socket được định nghĩa trong hệ điều hành bằng một cấu trúc, được xem nhưđiểm nối để hai chương trình giao tiếp với nhau Cấu trúc của socket có 5trường,

Trang 9

Hình 1.1: Cấu trúc Socketc Phân loại

Có 4 loại Socket phổ biến:

− Stream Socket: Tên gọi khác của loại này là Socket hướng kết nối, hoạtđộng thông qua giao thức TCP (Transmission Control Protocol) Quá trình vậnhành diễn ra khi Server và Client đã kết nối với nhau Hình thức này có ưu điểmlà dữ liệu đảm bảo truyền đúng đến nơi nhận, thứ tự và thời gian nhanh chóng,chuẩn xác Mỗi thông điệp gửi đi đều có xác nhận trả về cho đối tượng thựchiện Qua đó, người dùng được thông báo thông tin đầy đủ Mặt khác, nhượcđiểm là giữa máy chủ và máy nhận chỉ có một IP Vì thế khi kết nối, một máyphải chờ đến khi đối tượng kia chấp nhận kết nối.

− Datagram Socket: còn được gọi là Socket không hướng kết nối Hìnhthức hoạt động với sự hỗ trợ của giao thức UDP (User Datagram Protocol).Datagram Socket hoạt động tốt ngay cả khi không thiết lập kết nối giữa hai máyvới nhau Các ưu điểm có thể kể đến của Datagram Socket là quá trình kết nối,truyền tải thông tin đơn giản, không yêu cầu quá nhiều thao tác Thời giantruyền

tải dữ liệu được đánh giá là cực nhanh chóng Thế nhưng, nó có một nhượcđiểm lớn là quá trình truyền thông tin chưa đảm bảo độ tin cậy, dữ liệu bên nhận

Trang 10

có thể không đúng với thứ tự bên truyền hoặc bị lặp.

− WebSocket: Là công cụ hỗ trợ kết nối qua lại giữa Client và Server trên

Internet Quy trình diễn ra nhanh chóng, hiệu quả nhờ việc sử dụng TCP Socket.Không chỉ dùng riêng cho ứng dụng web, loại này có thể áp dụng với bất kỳmục đích trao đổi thông tin khác Điều cần đảm bảo là hoạt động diễn ra trênkhông gian mạng Loại này có ưu điểm như sau: Tăng cường tốc độ truyền tảithông tin giữa hai chiều Khi phát hiện lỗi rất dễ phát hiện và xử lý Cách sửdụng đơn giản, không cần cài đặt thêm các phần mềm bổ sung khác Không cầndùng nhiều phương pháp hỗ trợ kết nối khác nhau Trong khi đó, nhược điểmlà nó chưa thể chạy trên tất cả trình duyệt Điều tương tự xảy ra đối với dịch vụcó phạm vi yêu cầu, khó hỗ trợ hoàn toàn.

− Unix Socket: Đây là điểm giao tiếp, hỗ trợ trao đổi giữa các ứng dụngkhác nhau ngay trên cùng máy tính Mọi hoạt động được ghi nhận diễn ra ởnhân của hệ điều hành Nhờ vậy, tốc độ kết nối, truyền tải nhanh, nhẹ, đảm bảohiệu quả Đặc điểm của Unix Socket là tránh được các bước kiểm tra hoặcRouting Vì thế, quá trình truyền tin dễ dàng hơn nhiều Ngoài ra, một số ưuđiểm khác với dạng Endpoint này là: Có thể tăng cường tốc độ truy cập MySQLlên đến 30 – 50%, giảm độ trễ, từ 60ms chỉ còn 5ms Tăng cường PostgreSQLlên hơn 30% Tăng Redis lên 50% Nhược điểm tồn tại trong trường hợp ứngdụng nằm trên những máy chủ khác nhau Hệ thống sẽ không thể kết nối bằngUnix Socket Ngoài ra, vấn đề phân quyền giữa các tập tin đôi khi vẫn xảy ra.Ngoài ra, còn có một số loại Socket khác như Raw Socket, Sequenced PacketSocket, …

Trang 11

gồm C, C++, Java, Python, v.v… Vì thế nó tương thích với hầu hết mọi đốitượng

người dùng với những cấu hình máy khác nhau.

Mục đích của lập trình Socket là tạo ra một cơ chế để ứng dụng có thể giao tiếpvới nhau qua mạng Điều này có vai trò quan trọng trong việc phát triển ứngdụng

mạng và giao tiếp giữa các thiết bị trên cùng một mạng Dưới đây là một số mụcđích cụ thể của việc sử dụng lập trình Socket.

Giao tiếp giữa các quy trình (process): Socket cho phép các quy trình trên cácmáy tính khác nhau giao tiếp với nhau Điều này rất hữu ích trong việc xây dựngứng dụng phân tán, nơi các phần của ứng dụng chạy trên các máy tính riêng biệtvà cần trao đổi dữ liệu.

Truyền dữ liệu: Socket cho phép các ứng dụng gửi và nhận dữ liệu qua mạng.Điều này cho phép truyền dữ liệu từ một máy tính đến một máy tính khác, hoặcgiữa các tiến trình trên cùng một máy tính Các gói tin này có thể chứa thông tinvề tin nhắn, tệp tin, hoặc bất kỳ dữ liệu nào khác.

Tạo liên kết giữa client và server: Khi một ứng dụng client muốn gửi dữ liệuđến

Trang 12

server, nó sẽ tạo một socket và kết nối đến socket trên server thông qua mộtcổng.

Cổng là một số nguyên dương được sử dụng để xác định dịch vụ hoặc ứng dụng cụ thể trên server.

Hỗ trợ nhiều ngôn ngữ và hệ điều hành: Socket programming không chỉ hỗ trợcác ứng dụng viết bằng ngôn ngữ lập trình khác nhau (như Python, Java, C++, v.v.) giúp tận dụng sức mạnh của mỗi ngôn ngữ và tối ưu hóa hiệu suất mà còn hoạt động trên nhiều hệ điều hành khác nhau (như Windows, Linux, macOS,v.v.)

giúp việc lập trình tích hợp dễ dàng và tăng tính linh hoạt và tương thích vớinhiều

môi trường khác nhau.

1.2 Cơ chế hoạt động của Socket trong trao đổi dữ liệu qua Internet

Hiện nay, dữ liệu được truyền qua Internet thông qua hai giao thức chủ yếu là TCP và UDP Đối với giao thức TCP sử dụng Stream Socket, dữ liệu đượctruyền

bảo đảm tính toàn vẹn, độ tin cậy và thứ tự các gói tin Điều đó giúp giao thức TCP được ứng dụng chủ yếu trong những hoạt động cần độ chính xác cao như truyền tải trang web, truyền tải email, hay kho lưu trữ điện toán đám mây,… Ngược lại, giao thức UDP sử dụng Datagram Socket cung cấp một đường truyềnnhanh chóng, nhưng dữ liệu không thể đáng tin cậy và khó đảm bảo tính toànvẹn

như TCP Dễ thấy rằng, với những đặc tính như vậy, giao thức UDP được dùng trong những hoạt động mạng yêu cầu tính thời gian thực, hoặc không yêu cầu độ

Trang 13

chính xác của dữ liệu quá cao Một số ứng dụng của giao thức UDP có thể kểđến

là truyền phát trực tiếp, trò chơi trực tuyến, hay các ứng dụng liên lạc thời gian thực như Zoom, Skype có thể chấp nhận một số mất mát dữ liệu mà không ảnh hưởng đến chất lượng cuộc gọi.

*Datagram Socket

Datagram Socket là một loại socket trong lập trình mạng được sử dụng để giaotiếp qua giao thức UDP Datagram Socket cho phép truyền dữ liệu dưới dạngcác

gói tin độc lập, không yêu cầu việc thiết lập kết nối trước Dưới đây là cơ chế hoạt động của Datagram Socket:

− Tạo và gán địa chỉ cho socket: Đầu tiên, ứng dụng muốn truyền dữ liệu cần phải tạo một Datagram Socket để thiết lập điểm kết nối trên máy tính Sauđó cần gán một địa chỉ IP và một số cổng cho socket, để socket có thể xác định được nơi nó sẽ lắng nghe hoặc gửi dữ liệu.

− Gửi dữ liệu: Khi cần gửi dữ liệu, ứng dụng sử dụng hàm gửi (sendto) đểgửi

dữ liệu qua socket Dữ liệu được gói vào các gói tin và gửi đi mà không cầnthiết lập kết nối trước.

− Nhận dữ liệu: Để nhận dữ liệu, ứng dụng sử dụng hàm nhận (recvfrom) đểlắng nghe các gói tin đến qua socket Khi một gói tin đến, ứng dụng nhận

được dữ liệu cùng với địa chỉ và cổng của nguồn gửi.

− Xử lý dữ liệu: Sau khi nhận dữ liệu, ứng dụng có thể xử lý nó theo yêu cầucủa mình, ví dụ: hiển thị dữ liệu lên giao diện người dùng, lưu trữ vào cơ sở

Trang 14

dữ liệu, hoặc truyền tiếp cho các phần khác của ứng dụng.

*Stream Socket

Stream Socket được sử dụng trong giao thức TCP, cụ thể là trong quá trình bắt tay ba bước Quá trình này giúp thiết lập một kênh truyền an toàn giữa hai thực thể trong mạng Internet Đúng như tên gọi của nó, quy trình này có 3 bước cơbản

như sau:

Hình 1.2: Quá trình bắt tay 3 bước

− Đầu tiên, máy chủ A sẽ khởi tạo kết nối bằng cách gửi gói tin SYN đến máychủ đích Gói tin này chứa một số ngẫu nhiên(ví dụ:100) đánh dấu sự bắt đầucủa số thứ tự

cho dữ liệu mà máy chủ A sẽ truyền.

− Máy chủ đích nhận gói SYN của A, sau đó nó sẽ phản hồi lại bằng gói SYNlà số thứ tự của của máy A tăng thêm 1 (VD: 101), và gói ACK là số của máyserver (VD: 200) (số xác nhận)

− Máy chủ A sau khi nhận được 2 gói ACK và SYN từ máy chủ đích, cũng sẽ

Trang 15

gửi lại một gói ACK xác nhận là số thứ tự của máy đích tăng thêm 1 (VD:102).

Sau khi 3 bước được thực hiện, kênh truyền giữa 2 máy đã được tạo và nó sẽduy

trì liên tục cho đến khi kết thúc quá trình truyền tin Để đi vào chi tiết hơn, hình sau sẽ nói về cơ chế hoạt động của Stream Socket:

Hình 1.3: Cơ chế hoạt động của Stream Socket

− Bước 1: Client sẽ tạo ra 1 socket có chức năng gửi yêu cầu kết nối với Server.Còn Server sẽ tạo 1 socket có chức năng lắng nghe và chấp nhận các yêu cầukết nối từ phía Client Quá trình tạo sẽ sử dụng hàm socket() Sau đó, hai bênsẽ gán địa chỉ đích và Port cho socket của mình.

− Bước 2: Socket ở phía Client sẽ gửi đi gói tin SYN như một yêu cầu kết nốibằng hàm connect(), trong khi socket ở Server sẽ lắng nghe yêu cầu bằnghàm listen() Khi “bắt” được yêu cầu từ phía Client, nó sẽ chấp nhận kết nối

Trang 16

bằng hàm accept().

− Bước 3: Server sẽ tạo một socket mới có chức năng truyền và nhận dữ liệu.Sau đó, Client và Server sẽ trao đổi các gói tin ACK và SYN như đã trìnhbày ở trên qua socket này, tiếp theo chúng mới truyền và nhận dữ liệu củanhau qua hàm send() và recv().

− Bước 4: Sau khi quá trình trao đổi dữ liệu hoàn tất, tài nguyên trên socket sẽđược giải phóng bằng hàm close() Tuy nhiên socket không bị xóa hoàn toàn,mà sẽ có thể tái sử dụng nhằm tối ưu hiệu suất và tài nguyên của Server.Có thể thấy được, mỗi loại socket đều có ưu điểm, hạn chế, cũng như các ứngdụng đặc thù của riêng mình Nhưng chung quy lại, chúng đều phục vụ một mụcđích chung là trao đổi dữ liệu qua Internet.

1.3 Các ứng dụng của lập trình Socket

Lập trình Socket được sử dụng rộng rãi và có nhiều ứng dụng trong các lĩnh vựckhác nhau, bao gồm:

Giao tiếp Client-Server: Lập trình socket được sử dụng rộng rãi để cho phép

giao tiếp giữa máy khách và máy chủ trong môi trường mạng Máy chủ lắngnghe

các kết nối đến ở các port cụ thể, trong khi máy khách kết nối với máy chủ, cho phép chúng trao đổi dữ liệu và thực hiện nhiều tác vụ khác nhau như truyền tệp, truy cập từ xa và nhắn tin.

Web Server và Client: Máy chủ web, chứa các trang web và phục vụ trang

cho các máy khách (trình duyệt web), sử dụng lập trình socket để xử lý yêu cầu

Trang 17

và phản hồi HTTP Tương tự, các máy khách (trình duyệt) sử dụng socket đểgiao

tiếp với các máy chủ khi truy xuất trang web, gửi yêu cầu HTTP và nhận phảnhồi.

Ứng dụng chat: Lập trình socket cho phép giao tiếp thời gian thực trong các

ứng dụng trò chuyện, cho phép người dùng gửi và nhận tin nhắn ngay lập tức Các máy chủ quản lý kết nối từ nhiều client và phân phối tin nhắn giữa chúng,tạo

điều kiện cho trò chuyện một-một hoặc trò chuyện nhóm.

Trò chơi trực tuyến đa người chơi: Lập trình socket rất quan trọng cho việc

triển các trò chơi trực tuyến đa người chơi, nơi người chơi tương tác thời gian thực với nhau Các máy chủ sử dụng socket để quản lý kết nối của người chơi,xử

lý logic trò chơi và đồng bộ hóa trạng thái trò chơi trên nhiều client, cho phéptrải

nghiệm chơi game có tính cộng tác và cạnh tranh.

Truy cập và điều khiển từ xa: Lập trình socket tạo điều kiện cho việc truy

nhập

và kiểm soát máy tính và các thiết bị từ xa qua mạng Các ứng dụng desktop từ xa và bộ giả lập terminal sử dụng socket để thiết lập kết nối giữa một thiết bị client và một hệ thống từ xa, cho phép người dùng truy cập và quản lý tàinguyên

từ xa Các hệ thống phân tán: Lập trình socket đóng một vai trò quan trọng trongviệc xây dựng các hệ thống phân tán, nơi nhiều thành phần độc lập giao tiếp với

Trang 18

nhau qua mạng Các ứng dụng phân tán như cơ sở dữ liệu phân tán, hệ thống tệpphân tán và các trang tính phân tán phụ thuộc vào socket để giao tiếp giữa các tiến trình và trao đổi dữ liệu.

IoT: Trong các hệ thống IoT, các thiết bị tương tác với nhau và với các máy

chủ tập trung để thu thập dữ liệu, giám sát môi trường và điều khiển các đốitượng

vật lý Lập trình socket tạo điều kiện cho việc giao tiếp giữa các thiết bị IoT,cổng

thông tin và máy chủ đám mây, cho phép truyền dữ liệu thời gian thực, thu thập dữ liệu cảm biến và quản lý thiết bị.

Giám sát và quản lý mạng: Lập trình socket được sử dụng trong các công cụ

giám sát và quản lý mạng để thu thập thống kê, giám sát lưu lượng và quản lýcác

thiết bị mạng Các công cụ này sử dụng socket để giao tiếp với các thiết bịmạng,

thu thập thông tin và thực hiện các nhiệm vụ cấu hình.

Truyền dữ liệu: Các ứng dụng truyền tập tin như FTP và SCP sử dụng lập

socket để truyền tập tin giữa các client và máy chủ một cách an toàn Socket chophép truyền dữ liệu đáng tin cậy và hỗ trợ các tính năng như xác minh tính toàn vẹn của tập tin và tiếp tục truyền tập tin bị gián đoạn.

Thu thập dữ liệu: Có thể sử dụng lập trình socket để tạo các kết nối mạng tới

các cổng TCP hoặc UDP trên server mục tiêu và xác định trạng thái của cáccổng

đó (mở, đóng hoặc được lọc) Bằng cách sử dụng socket, người dùng có thể thiết

Trang 19

lập các kết nối mạng và gửi các gói tin đến máy chủ để kiểm tra xem cổng cósẵn

hay không Điều này cho phép hacker xác định được thông tin ban đầu của mục tiêu để khai thác các lỗ hổng và thực hiện tấn công Bên cạnh đó, lập trìnhsocket

cũng giúp người quản trị mạng đánh giá được độ an toàn của hệ thống để đưa ra những giải pháp khắc phục, phòng chống xâm nhập.

1.4 Các thư viện và ngôn ngữ hỗ trợ lập trình Socket

1.4.1 Các ngôn ngữ hỗ trợ lập trình Socket

Lập trình Socket chính là cốt lõi của lập trình mạng, do đó hiện nay có rất nhiềucác ngôn ngữ lập trình phổ biến hỗ trợ lập trình socket, dưới đây là một số vídụ:

-C/C++: là ngôn ngữ phổ biến nhất cho lập trình socket Nó cung cấp hiệu suất

cao và khả năng kiểm soát chi tiết cho các lập trình viên Các thư viện hỗ trợ lậptrình socket gồm: Thư viện Winsock dành cho hệ điều hành Windows; Thư việnBerkeley sockets dành cho hệ điều hành Unix/Linux và thư viện Libevent – thưviện đa nền tảng hỗ trợ nhiều giao thức mạng và các tính năng nâng cao.

-Java: Java là ngôn ngữ lập trình hướng đối tượng phổ biến khác hỗ trợ lập

socket Java cung cấp khả năng di động cao và dễ sử dụng Các thư viện hỗ trợ lập trình socket gồm: java.net.Socket: Cung cấp các lớp cơ bản để tạo kết nối socket và gửi/nhận dữ liệu; java.nio.channels.SocketChannel: Cung cấp các lớp hiệu suất cao hơn cho lập trình socket không đồng bộ.

Trang 20

-Go: Go là ngôn ngữ lập trình mới nổi được thiết kế cho hiệu suất cao và khả

năng đồng bộ Go là lựa chọn tốt cho việc phát triển các ứng dụng socket có yêucầu cao.

Thư viện hỗ trợ lập trình socket là net, có chức năng cung cấp các lớp cơ bản để tạo kết nối socket và gửi/nhận dữ liệu.

-JavaScript: JavaScript được sử dụng chủ yếu cho phát triển web, nhưng nó

nâng cao.

1.4.2 Giới thiệu module socket trong Python

Python cung cấp Module Socket giúp chúng ta dễ dàng thực hiện kết nối Client/Server để giao tiếp với nhau Để có thể sử dụng được, trước tiên ta phải import module Socket vào chương trình:

Trang 21

Tạo một Socket:

Chi tiết tham số:

Socket_family:họ địa chỉ

AF_INET: IPV4AF_INET6: IPV6AF_UNIX

Socket Type: cách thiết lập giao thức

+ SOCK_STREAM: Dựa trên giao thức TCP, chỉ thực hiện trên 2tiến trình đã thiết lập kết nối Giao thức này đảm bảo dữ liệu truyềnđến nơi nhận 1 cách tin cậy và đúng tuần tự Còn được gọi là sockethướng kết nối.

+ SOCK_DGRAM: Dựa trên giao thức UDP, không yêu cầu thiếtlập kết nối Giao thức này không đảm bảo dữ liệu truyền đến nơinhận 1 cách tin cậy và toàn vẹn Còn được gọi là socket hướngkhông kết nối.

Bảng 1.4: Chi tiết tham số của hàm socket()

Một số phương thức được sử dụng trong lập trình Socket với ngôn ngữ Python:

self.connection, addr = self.node.accept() Phương thức này thiết lập chấp nhận kết nối

self.connection.send(SMS.encode()) Phương thức này dùng để gửi tin nhắn khi được kết

self.connection.recv(1024).decode() Phương thức này sử dụng để nhận thông báo từ client trong suốt lúc chương trình hoạt độngBảng 1.5: Một số phương thức dùng để kết nối và trao đổi thông tin.

Trang 22

Python hỗ trợ thu thập thông tin Server, bao gồm: tên miền, host, địa chỉ IP, … với một số Module sau đây:

gethostname() Trả về một chuỗi chứa tên máy chủ của máy màtrình thông dịch Python hiện đang thực thi.

Dùng để dịch tên máy chủ thành địa chỉ IPv4 Địa chỉ IPv4 được trả về dưới dạng chuỗi và được lưu vào biến addr gethostbyname() không hỗ trợ

Tương tự gethostbyname() nhưng được mở rộng thêm Trả về bộ ba: hostname, aliaslist, ipaddrlist, trong đó hostname là tên máy chủ lưu trữ chính của hostname, aliaslist là danh sách (có thể trống) tên các máy chủ lưu trữ thay thế cho cùng một địa chỉ và ipaddrlist là danh sách địa chỉ IPv4.

gethostbyname_ex() không hỗ trợ IPv6.

gethostbyaddr(ip_address) Tương tự gethostbyname_ex(), tuy nhiên tham sốtruyền vào là địa chỉ IPv4.

getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)

Dịch đối số của host/port thành một chuỗi 5 bộ chứa tất cả các đối số cần thiết để tạo thành một Socket được kết nối với dịch vụ đó Host là tên miền, port là tên chuỗi dịch vụ.

Hàm này sẽ trả về 5 bộ với cấu trúc như sau:(family, type, proto, canonname, sockaddr).

connect_ex(IP address, port) Trả về giá trị 0 nếu thao tác thành công, ngược lạisẽ trả về giá trị cho biến errno.

Bảng 1.6: Một số phương thức dùng để thu thập thông tin Server.

Trang 23

CHƯƠNG II – ỨNG DỤNG AN TOÀN SOCKET-PROGRAMING2.1 Một số nguy cơ bảo mật trong Socket Programing

2.1.1 Thiếu xác thực trong quá trình bắt tay

WebSocket, một giao thức socket phổ biến cho giao tiếp thời gian thực, có mộtquá trình bắt tay để thiết lập kết nối Khác với các yêu cầu HTTP thông thường, quá trình bắt tay này không bao gồm chức năng xác thực khách hàng Điều này có nghĩa là máy chủ không thể xác minh danh tính của khách hàng trong quá trình kết nối ban đầu Một số rủi ro tiềm ẩn như:

+ Mạo danh: Người dùng trái phép có thể mạo danh người dùng hợp pháp bằngcách bắt chước các gói dữ liệu Điều này có thể dẫn đến truy cập trái phép

hoặc các hành động trái phép.

+ Gian lận dữ liệu: Kẻ tấn công có thể chặn và sửa đổi dữ liệu chảy qua kết nốisocket.

2.1.2 Kênh TCP không được mã hóa

Một vấn đề khác với WebSockets là chúng có thể được sử dụng trên kênh TCPkhông được mã hóa Điều này dẫn đến tất cả các loại vấn đề được liệt kê trong Top 10 phơi nhiễm dữ liệu nhạy cảm A6 của OWASP Kênh TCP truyền dữ liệudưới dạng văn bản thuần túy, không được mã hóa Điều này khiến nó dễ bị tấn công bởi những kẻ nghe lén Một số tác động mà chúng có thể làm:

+ Đánh cắp dữ liệu nhạy cảm: Thông tin đăng nhập, mật khẩu, dữ liệu tài chínhvà các thông tin nhạy cảm khác có thể bị đánh cắp nếu kẻ tấn công có quyềntruy cập vào mạng.

+ Sửa đổi dữ liệu: Kẻ tấn công có thể thay đổi dữ liệu được truyền đi, dẫn đến

Trang 24

các hành động không mong muốn hoặc sai lệch thông tin.

+ Nghe lén giao tiếp: Kẻ tấn công có thể theo dõi toàn bộ nội dung giao tiếpgiữa các ứng dụng sử dụng kênh TCP.

2.2 Các phương pháp bảo mật

2.2.1 Xác thực người dùng

Trong lập trình Socket, việc xác thực người dùng là vô cùng quan trọng, nó giúp đảm bảo chỉ những người dùng được ủy quyền mới có quyền truy cập tài nguyên mạng Qua đó, xác thực người dùng giúp đảm bảo tính toàn vẹn, tính bảo mật và độ tin cậy của hệ thống.

Quá trình xác thực thường diễn ra như sau:

+ Người dùng kết nối đến máy chủ thông qua socket.

+ Máy chủ yêu cầu người dùng cung cấp thông tin xác thực (VD: user vàpassword)

+ Người dùng gửi thông tin xác thực đến máy chủ.

+ Máy chủ kiểm tra thông tin xác thực và quyết định liệu người dùng có đượcphép truy cập hay không.

+ Nếu thông tin xác thực là hợp lệ, máy chủ sẽ cho phép kết nối tiếp tục vàcung cấp các dịch vụ được yêu cầu.

Sau đây là một số phương thức xác thực người dùng trong lập trình Socket: + Xác thực mật khẩu (Password Authentication): Trong phương pháp này,người dùng cần cung cấp một cặp tên đăng nhập và mật khẩu để đăng nhậpvào hệ thống Mật khẩu thường được bảo mật bằng cách sử dụng hàm băm.Sau đó, máy chủ sẽ kiểm tra xem cặp username và password này có hợp lệ

Trang 25

hay không.

+ Xác thực mã thông báo (Token-based Authentication): Người dùng đăngnhập bằng cách cung cấp một mã thông báo (token) duy nhất Mã thông báonày có thể được tạo ra bằng nhiều cách khác nhau và thường có thời hạn.(VD: JWT)

+ Xác thực chứng chỉ (Certificate Authentication): Sử dụng chứng chỉSSL/TLS để xác thực Mỗi bên đều có một bộ chứng chỉ, máy chủ sẽ xácminh xem chứng chỉ của người dùng có được ký bởi một tổ chức uy tín haykhông Trong python, có thể sử dụng module ssl để thực hiện xác thực theocách này.

TLS: Viết tắt của Transport Layer Security, TLS cũng giống như SSL là một giao thức mật mã giúp truyền thông an toàn TLS 1.0 được IETF phát triển năm 1999, các phiên bản tiếp theo là TLS 1.1, 1.2, 1.3.

Tóm lại, TLS là phiên bản tiếp theo và cải tiến của SSL, được phát triển để

Trang 26

cung cấp một môi trường bảo mật mạnh mẽ hơn cho việc truyền dữ liệu qua mạng Trong khi SSL vẫn tồn tại và được sử dụng trong một số trường hợp, TLSlà lựa chọn ưu tiên cho các ứng dụng và dịch vụ mới.

Trong giao thức SSL/TLS có 4 giao thức con với những chức năng cụ thể: + SSL Record: Giao thức này được sử dụng để chia nhỏ dữ liệu thành các gói tin nhỏ hơn, mã hóa dữ liệu và thêm các thông tin bảo mật như mã băm, chữký số, và khóa phiên trước khi gửi đi

+ SSL Handshake: Giao thức Handshake được sử dụng để thiết lập kết nối antoàn giữa máy khách và máy chủ, xác thực các bên và thỏa thuận các thôngtin cần thiết cho việc thiết lập kết nối bảo mật.

+ SSL Change Cipher Spec: Giao thức này được sử dụng để thông báo cho đốiphương biết rằng các thông tin được trao đổi từ bây giờ sẽ được mã hóa bằngcác thuật toán đã thỏa thuận trong giao thức Handshake.

+ SSL Alert: Giao thức này được sử dụng để thông báo về các sự kiện quantrọng và cảnh báo liên quan đến quá trình trao đổi dữ liệu bảo mật như nhưlỗi xác thực, lỗi băm, hoặc lỗi mã hóa,…

Trong 4 giao thức trên, mỗi giao thức đều có tầm quan trọng riêng, nhưng đặcbiệt phải kể đến giao thức SSL Handshake, đây được coi như là cốt lõi của giaothức SSL.

*Giao thức SSL Handshake

Trang 27

Giao tiếp qua SSL luôn bắt đầu bằng SSL Handshake Handshake SSL là mộtmật mã bất đối xứng cho phép trình duyệt xác minh máy chủ web, lấy khóa công khai và thiết lập kết nối an toàn trước khi bắt đầu truyền dữ liệu thực tế.

Hình sau minh họa các bước liên quan đến quá trình SSL Handshake:

Hình 2.1: SSL Handshake

*)Phân Tích Quá Trình

− Đầu tiên, máy khách gửi thông báo "client hello" Điều này bao gồm số phiên bản SSL của máy khách, cài đặt mật mã, dữ liệu theo phiên cụ thể và thông tin khác mà máy chủ cần giao tiếp với máy khách bằng SSL.

− Máy chủ phản hồi bằng một thông báo "server hello" Bao gồm số

Ngày đăng: 13/05/2024, 14:40

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan