Tải bản đầy đủ (.pdf) (36 trang)

Lý thuyết an toàn mạng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (484.41 KB, 36 trang )



Chương 1: LÝ THUYẾT AN TOÀN MẠNG

1.1. Các rủi ro đối với một hệ thống mạng
Một hệ thống mạng được kết nối với Internet sẽ có rất nhiều nguy cơ bị tấn công. Khi dữ liệu được
truyền đi trên mạng, nhiều khả năng sẽ bị Hacker( là những người có hiểu biết sâu về tin học và có
những kỹ năng tốt nhưng lại có những hành vi làm tổn hại người khác) đọc trộm dữ liệu. Khi một hệ
thống liên lạc với nhau thông qua địa chỉ để truyền nhận dữ liệu cũng dễ bị Hacker giả danh để lấy dữ
liệu hoặc những vấn đề về Virus,…có còn nhiều nguy cơ khác nữa khiến cho một hệ thống mạng của
chúng ta trở nên không an toàn nghĩa là hệ thống của chúng ta có thể bị tấn công bằng nhiều hình thức
khác nhau.Sau đây là một số hình thức tấn công thường gặp:
 Giả địa chỉ - là một kiểu tấn công mà kẻ tấn công đóng vai một hệ thống hợp pháp bằng cách đánh
cấp địa chỉ sau đó giả làm nạn nhân đã bị đánh cắp để lấy dữ liệu mà những đầu liên lạc phía bên kia
gứi tới.
 Adware – phần mềm tích hợp trong quảng cáo. Nó có thể không có hại, mà cũng có thể thu thập dữ
liệu của người sử dụng hay máy tính của người sử dụng và chuyển nó về cho người quảng cáo nó.
 Sự xác nhận – hành động để bảo đảm rằng một người hay một hệ thống đang cố gắng truy cập một
hệ thống được xác nhận đúng quyền.
 Cracker – một người nào đó thâm nhập vào máy tính, thường là do thích thú hay ý đồ chính trị và
đôi khi vì lý do tài chính. Cracking là hành động thâm nhập vào máy tính.
 Mật mã hóa – tiến trình chuyển đổi thông tin sang một mã bí mật, gọi là cipher text, bằng một giải
thuật mã hóa. Dịch vụ mật mã hóa có thể cung cấp tính bảo mật, toàn vẹn, xác thực và không thể từ
chối.
 Cybercrime – một thuật ngữ tổng hợp được dùng để mô tả một dãy tấn công được tạo ra để chống
lại một tổ chức bằng các phương tiện điện tử.
 Từ chối dịch vụ - tiến trình mà qua đó các người sử dụng hợp pháp, các khách hàng, client hay các
máy tính khác bị ngăn chặn khỏi việc truy cập tài nguyên trên một máy tính do một thành phần thứ 3
không được xác nhận. Điều này được thực hiện bằng cách làm tràn ngặp máy tính do các yêu cầu giả,
hay giả các yêu cầu hợp pháp.( Ví dụ như DDoS)
 Hacker – nguồn gốc là để mô tả một người nào đó có hiểu biết rất sâu về máy tính và kỹ năng tốt


và khả năng lập trình.
 Mã độc – là thuật ngữ cho một virus, các applet hostile hoặc đoạn mã được tải về từ web server hay
gửi trực tiếp từ một hệ thống này đến một hệ thống khác.
 Spyware – phần mềm để giám sát một máy tính được sử dụng như thế nào và gửi báo cáo đến một
máy tính khác qua internet. Các chương trình spyware được tạo ra để ghi lại số thẻ tín dụng hay toàn bộ
username và password. Spyware cũng được dùng để khởi động một cuộc tấn công từ chối dịch vụ.
 Trojan – là một dạng virus, các chương trình chạy âm thầm để xóa file hay làm xáo trộn nội dung
của chúng. Hơn nữa chúng còn cho phép máy tính bị điều khiển từ xa, bằng việc cung cấp cho ai đó
truy cập file hay ứng dụng.
 Worm – là virus thuần túy về mạng. Chúng được thiết kế để khám phá và phát hiện các điểm yếu
trong một mạng máy tính để lan truyền chính chúng từ máy này sang máy khác.




1.2. Các bước tấn công vào một hệ thống mạng
Thông thường, một quá trình tấn công vào một hệ thống mạng trải qua 4 bước:
 Thu thập thông tin
 Truy cập ban đầu
 Thực hiện leo quyền
 Phi tang dấu vết
1.2.1. Tiến trình thu thập thông tin:
 Bước đầu tiên trong thu thập thông tin là kiếm được một đích để tấn công. Một hacker có thể chọn
một người hay công ty để tấn công, hoặc tìm kiếm một đối tượng không được bảo vệ trên internet mà
dễ dàng tấn công. Số lượng thông tin có giá trị của người sử dụng internet có liên quan đến mức độ ta
sử dụng internet. Nghĩa là lướt web càng nhiều càng dễ bị tấn công. Nếu ta có một tên miền hay một
web site, hay một địa chỉ mail cho mục đích công cộng.
 Nếu không tìm được một đích rõ ràng thì hacker cũng có rất nhiều công cụ hỗ trợ cho việc quét
các đích ngắm có thể có trên internet. Các đơn giản nhất làm sử dụng lệnh ping, quét rất nhanh hàng
ngàn máy tính. Đều này cho biết một máy tính có tồn tại trên mạng không.

 Port Scan thì nâng cao hơn và thường được thực hiện trên máy tính riêng lẽ. Một Port Scan có thể
cho hacker biết rằng dịch vụ nào đang hoạt động, HTTP hay FTP. Mỗi một dịch vụ đang hoạt động
cung cấp một điểm đi vào tiềm ẩn cho hacker. Trên các máy tính không được bảo vệ, các port không
được dùng đáp ứng rằng chúng đã bị đóng, điều này cũng cho hacker biết rằng máy tính vẫn đang tồn
tại.
1.2.2. Tiến trình truy cập ban đầu
Các hacker khai thác tối đa các sơ hở tìm thấy trong giai đoạn thu thập thông tin và thiết lập một
điểm “đi vào” vào trong máy tính
1.2.3. Leo thang phân quyền
Một khi đã kết nối được đến một máy tính, bước kế tiếp là đạt được điều khiển càng nhiều càng tốt
Các hacker cố gắng đạt được quyền quản trị đến máy tính. Điểm mấu chốt là thu thập được quyền quản
trị - thường là mật khẩu. Hacker cố gắng tải về file chứa mật khẩu và giải mã nó.
Một cách khác là đặt một trojan horse vào máy tính đó. Nếu một hacker có thể đặt một chương trình
như Back Orifice, Subseven, hay NetBus trên một máy tính và chạy nó.
Các trojan horse khác có thể ghi lại các keystroke để bắt các mật khẩu và dữ liệu nhạy cảm. NPF cung
cấp 2 mức bảo vệ để chống lại trojan horse.
1.2.4. Tiến trình che đậy dấu vết:
Khi hacker chiếm được điều khiển một máy tính ở một mức nào đó, nhiệm vụ là che dấu mọi dấu
vết. Nếu ta chưa phát hiện một hacker đã thỏa hiệp mới máy tính rồi, thì ta không thể từng bước ngừng
các hành động này. Trên các máy sử dụng hệ điều hành Windows 2000/XP, các haker cố tắt việc kiểm
tra và thay đổi hoặc xóa đi các log file ghi sự kiện. Trên các hệ điều hành, các hacker có thể ẩn đi các
file để truy cập lần sau. Trong trường hợp cực đoan, các hacker có thể format ổ đĩa cứng để tránh bị
nhận dạng.




1.3. Các nguy cơ bị tấn công khi sử dụng TELNET
Ngày nay rất nhiều người có nhiều tài khoản máy tính. Nếu cũng bạn hiểu biết về user, bạn phải có
một tài khoản cá nhân với một nhà cung cấp dịch vụ Internet (ISP), một tài khoản làm việc trên mạng

nội bộ chủ, và một hoặc nhiều máy tính cá nhân tại nhà. Bạn cũng phải được cho phép sử dụng những
tài khoản khác của chính gia đình hoặc bạn bè của bạn.
Nếu bạn có nhiều tài khoản, tự nhiên bạn sẽ muốn kết nối giữa chúng. Ví dụ như bạn muốn chép
file giữa nhiều máy tính thông qua mạng, đăng nhập vào một tài khoản rất xa từ một máy khác, hoặc
truyền dòng lệnh đến một máy tính ở xa để thực hiện. Có nhiều chương trình khác nhau đã tồn tại để
phục vụ cho những mục đích đó như là FTP và RCP để truyền file, TELNET và RLOGIN để đăng
nhập từ xa, và RSH để thực hiện lệnh từ xa.
TELNET là một giao thức mạng (network protocol) được dùng trên các kết nối với Internet hoặc các
kết nối tại mạng máy tính cục bộ LAN. TELNET thường được dùng để cung cấp những phiên giao
dịch đăng nhập, giữa các máy trên mạng Internet, dùng dòng lệnh có tính định hướng người dùng. Tên
của nó có nguồn gốc từ hai chữ tiếng Anh "telephone network" (mạng điện thoại), vì chương trình
phần mềm được thiết kế, tạo cảm giác như một thiết bị cuối được gắn vào một máy tính khác. Đối với
sự mở rộng của giao thức, chữ "telnet" còn ám chỉ đến một chương trình ứng dụng, phần người dùng
của giao thức - hay còn gọi là trình khách (clients). Trong bao nhiêu năm qua, TELNET vốn được cài
đặt sẵn trong hầu hết các hệ điều hành Unix và cả trên Window.
Trên rất nhiều hệ thống, chương trình ứng dụng "telnet" còn được dùng trong những phiên giao dịch
tương tác TCP ở dạng sơ đẳng (interactive raw-TCP sessions), và còn được dùng để thông nối với
những dịch vụ trên các máy chủ POP3, mà không cần đến những trình khách chuyên dụng. Cụm từ
tiếng Anh "to telnet" còn được dùng như là một động từ, có nghĩa là "thành lập" hoặc "sử dụng", một
kết nối dùng giao thức TELNET.
Nếu bạn truyền một file nhạy cảm thông qua Internet, có khả năng một kẻ xấu có thể chặn lại và
đọc dữ liệu. Thậm chí, nếu bạn đăng nhập vào một máy tính từ xa khác bằng việc sử dụng một chương
trình như TELNET, username và password của bạn có thể bị lộ khi chúng được truyền trên mạng.
Làm sao để ngăn chặn những vấn đề nghiêm trọng đó?. Bạn có thể cài một firewall, hoặc bạn có thể
dùng nhiều giải pháp khác nhau với độ phức tạp và giá thành khác nhau nhưng có lẽ phương pháp hiệu
quả và an toàn nhất là Bạn có thể dùng một chương trình mã hoá để chuyển dữ liệu thành một đoạn
code bí mật mà không ai có thể đọc được. SSH đã ra đời để thực hiện công việc đó.


Chương 2: GIỚI THIỆU SSH


2.1. Giao thức SSH là gì?
SSH (tiếng Anh: Secure Shell) là một giao thức mạng dùng để thiết lập kết nối mạng một cách bảo
mật. SSH hoạt động ở lớp trên trong mô hình phân lớp TCP/IP. Các công cụ SSH (như là OpenSSH,
PuTTy, ) cung cấp cho người dùng cách thức để thiết lập kết nối mạng được mã hoá để tạo một kênh
kết nối riêng tư. Hơn nữa tính năng tunneling (hoặc còn gọi là port forwarding) của các công cụ này
cho phép chuyển tải các giao vận theo các giao thức khác. Do vậy có thể thấy khi xây dựng một hệ
thống mạng dựa trên SSH, chúng ta sẽ có một hệ thống mạng riêng ảo VPN đơn giản.
Mỗi khi dữ liệu được gửi bởi một máy tính vào mạng, SSH tự động mã hoá nó. Khi dữ liệu được
nhận vào, SSH tự động giải mã nó. Kết quả là việc mã hoá được thực hiện trong suốt: người dùng có
thể làm việc bình thường, không biết rằng việc truyền thông của họ đã được mã hoá an toàn trên mạng.
2.2. Lịch sử phát triển các phiên bản SSH
SSH1 và giao thức SSH-1 được trình bày năm 1995 bởi Tatu Ylõnen, một nhà nghiên cứu ở trường
đại học kĩ thuật Helsinki của Phần Lan. Sau khi mạng trường đại học của ông ta là nạn nhân của một
cuộc tấn công đánh cắp password vào đầu năm đó.
Tháng 7 năm 1995, SSH1 được phát hành rộng rãi dưới dạng một phần mềm miễn phí có source
code, cho phép mọi người sao chép và sử dụng mà không thu phí. Vào cuối năm đó, ước tính có khoảng
20.000 người dùng trên 50 quốc gia đã sử dụng SSH1, và mỗi ngày Ylõnen nhận 150 mail yêu cầu hỗ
trợ. Để đáp lại, Ylõnen đã thành lập SSH Communications Security (SCS, ) vào
tháng 12 năm 1995 để duy trì, thương nghiệp hoá và tiếp tục phát triển SSH.
Cũng trong năm 1995, Ylõnen soạn thảo giao thức SSH-1 còn gọi là Internet Engineering Task
Force (IETF), nó diễn tả hoạt động cơ bản của phần mềm SSH1 trên thực tế. Nó là một giao thức có
phần quảng cáo nhưng còn một số lỗi và giới hạn nhưng rất phổ biến. Năm 1996, SCS giới thiệu một
phiên bản mới đó là phiên bản chính của giao thức, SSH 2.0 hay SSH-2, phiên bản này được kết hợp
chặt chẽ những thuật toán mới và không hợp với SSH-1. Trong lúc đó, IETF thành lập một nhóm làm
việc gọi là SECSH (Secure Shell) để chuẩn hoá giao thức và chỉ đạo sự phát triển của nó trên lợi ích
chung. Nhóm làm việc SECSH đã trình bày bản phác thảo Internet đầu tiên đối với giao thức SSH-2 vào
tháng 2 năm 1997.
Năm 1998, SCS phát hành sản phẩm phần mềm “SSH Secure Shell” (SSH2), dựa trên giao thức
SSH-2. Tuy nhiên, SSH2 không thay thế SSH1 trong một số lĩnh vực, có 2 lí do. Thứ nhất, SSH2 không

có một số tiện ích, các đặc điểm có ích và cấu hình tuỳ chọn như SSH1. Thứ hai, SSH2 có nhiều giới
hạn về việc đăng kí. Bản chính SSH1 đã có sẵn miễn phí từ Ylõnen và trường đại học kĩ thuật Helsinki.
Phiên bản mới hơn của SSH1 từ SCS vẫn có sẵn miễn phí cho hầu hết người dùng, thậm chí cả cấu hình
thương mại cũng miễn phí chỉ cần phần mềm đó không được trực tiếp bán cho việc thu lợi nhuận hoặc
được tặng như là một dịch vụ cho khách hàng. Vì thế, tuy SSH2 đã xuất hiện, nhưng hầu hết những
người đang sử dụng SSH1 đều nhận ra vài ưu điểm của SSH1 so với SSH2 và tiếp tục sử dụng SSH1,
ba năm sau khi SSH2 ra đời thì SSH1 vẫn là phiên bản được sử dụng phổ biến trên Internet và vượt qua
cả SSH2 là giao thức tốt hơn và bảo mật hơn.


Tuy nhiên, SSH2 cũng có hai sự phát triển hưa hẹn, đó là một bản nới lỏng của SSH2 bản quyền và
sự xuất hiện SSH-2 bổ sung. Năm 2000, SCS mở rộng SSH2 bản quyền để cho phép sử dụng khi làm
việc riêng lẻ đối với các tổ chức hoạt động phi lợi nhuận. Nó cũng được mở rộng cho phép dùng miễn
phí đối với Linux, NetBSD, FreeBSD và hệ điều hành OpenBSD. Cùng thời gian đó, OpenSSH
() đã được phát triển nổi bật như là một SSH bổ sung, được phát triển dưới
hoạt động của dự án OpenBSD () và miễn phí sẵn bên dưới OpenBSD có đăng
kí. OpenSH hỗ trợ cả SSH-1 và SSH-2 trong một chương trình. Tuy OpenSSH được phát triển trên nền
OpenBSD nhưng nó cũng hoạt động được trên Linux, Solais, AIX và những hệ điều hành khác. Mặc dù
OpenSSH tương đối mới và không có vài đặc điểm có trong SSH1 và SSH2 nhưng nó đang trên đà phát
triển nhanh chóng và hứa hẹn trở thành bản SSH chính trong tương lai không xa.



Chương 3: BÊN TRONG GIAO THỨC SSH

3.1. Tổng quan về các đặc điểm của SSH
Các đặc điểm chính của giao thức SSH là:
- Tính bí mật (Privacy) của dữ liệu thông qua việc mã hoá mạnh mẽ
- Tính toàn vẹn (integrity) của thông tin truyền, đảm bảo chúng không bị biến đổi.
- Chứng minh xác thực (authentication) nghĩa là bằng chứng để nhận dạng bên gửi và bên nhận

- Giấy phép (authorization) :dùng để điều khiển truy cập đến tài khoản.
- Chuyển tiếp (forwarding) hoặc tạo đường hầm (tunneling) để mã hoá những phiên khác dựa trên
giao thức TCP/IP
3.1.1. Tính bí mật (Privacy)
Tính bí mật có nghĩa là bảo vệ dữ liệu không bị phơi bày. Mạng máy tính bình thường không bảo
đảm tính bí mật, bất cứ ai truy cập đến phần cứng của mạng hoặc đến những host kết nối với mạng đều
có thể sẽ đọc được tất cả dữ liệu đi qua mạng. Mặc dù mạng chuyển mạch hiện đại đã giảm những vấn
đề này trong mạng vùng cục bộ nhưng nó vẫn còn một vấn đề nghiêm trọng đó là mật khẩu dễ bị những
kẻ xấu đánh cắp.
SSH cung cấp tính bí mật bằng việc mã hoá dữ liệu đi qua mạng. Đó là việc mã hoá hai đầu dựa
trên khoá ngẫu nhiên (sinh ra để phục vụ cho một phiên kết nối và được huỷ đi khi phiên kết nối thành
công). SSH hỗ trợ nhiều thuật toán mã hoá đối với phiên dữ liệu, đó là những thuật toán mã hoá chuẩn
như: AES, ARCFOUR, Blowfish, Twofish, IDEA, DES và triple-DES (3DES)
3.1.2. Tính toàn vẹn (Integrity)
Tính toàn vẹn nghĩa là bảo đảm dữ liệu được truyền từ một đầu này đến đầu kia của mạng không bị
thay đổi. Giao thức SSH sử dụng phương pháp kiểm tra toàn vẹn mật mã, phương pháp này kiểm tra cả
việc dữ liệu có bị biến đổi hay không và dữ liệu đến có đúng là do đầu kia gửi hay không. Nó sử dụng
thuật toán băm khoá là MD5 và SHA-1.
3.1.3. Chứng minh xác thực (authentication)
Chứng minh xác thực là kiểm tra định danh của ai đó để xác định chính xác đúng là người đó hay
không. Mỗi kết nối SSH bao gồm hai việc xác thực: client kiểm tra định danh của SSH server (server
authentication) và server kiểm tra định danh của người sr dụng yêu cầu truy cập (user authentication).
Server authentication chắc chắn rằng SSH server là chính xác và không phải là kẻ lừa đảo để đề phòng
kẻ tấn công lại gửi kết nối mạng đến một máy khác. Server authentication cũng bảo vệ việc bị kẻ xấu
ngồi ở giữa hai bên, lừa gạt cả hai bên nghĩa là kẻ xấu sẽ nói với server nó là client và nói với client nó
là server để đọc được dữ liệu trao đổi giữa hai bên.
User authentication theo truyền thống là làm việc với mật khẩu. Để xác thực định danh của bạn, bạn
phải đưa ra mật khẩu, và dễ bị lấy cắp. Thêm nữa, để dễ nhớ một mật khẩu, người ta thường đặt nó
ngắn và có ý nghĩa nào đó nên dễ bị kẻ xấu đoán ra. Đối với mật khẩu dài hơn thì người ta thường chọn
những từ hoặc câu trong ngôn ngữ bẩm sinh nên cũng dễ bị bẻ khoá.



SSH hỗ trợ xác thực bằng mật khẩu, mã hoá mật khẩu khi nó truyền đi trên mạng. Đây là sự cải
thiện rất lớn so với những giao thức truy cập từ xa thông thường khác (Telnet, FTP) mà chúng gửi mật
khẩu qua mạng dưới dạng clear text. Tuy nhiên, việc chứng thực như thế vẫn chỉ là chứng thực mật
khẩu đơn giản vì thế SSH cung cấp cơ chế mạnh hơn và dễ sử dụng hơn: mỗi user có nhiều chữ kí khoá
công cộng (per-user public-key signature) và một cải tiến rlogin-style xác thực với định danh host được
kiểm tra bằng khoá công khai. Hơn nữa, những bản bổ sung khác nhau của SSH hỗ trợ vài hệ thống
khác bao gồm Kerberos, RSA, mật khẩu S/Key one-time và PAM. Một SSH client và SSH server đàm
phán với nhau để xác định cơ chế xác thực sẽ sử dụng dựa trên cấu hình của chúng và một server thậm
chí có thể yêu cầu nhiều kiểu xác thực.
3.1.4. Việc cấp giấy phép
Việc cấp giấy phép có tác dụng quyết định ai đó có thể hoặc không thể làm gì đó. Nó diễn ra sau
khi xác thực, bởi vì bạn không thể chấp nhận một ai đó có quyền gì khi chưa biết đó là ai. SSH server
có nhiều cách khác nhau để giới hạn hành động của client. Truy cập đến phiên đăng nhập tác động lẫn
nhau như TCP port và X Window forwarding, key agent forwarding, … có thể tất cả đều được điều
khiển mặc dù không phải tất các đặc điểm đều có sẵn trên tất cả các bản bổ sung SSH,và chúng không
luôn luôn tống quát hoặc linh hoạt như bạn ý muốn. Giấy phép có thể được điều khiển tại một mức
server rộng (ví dụ: /etc/ssh/sshd_config file đối với OpenSH) hoặc theo tài khoản phụ thuộc vào
phương thức xác thực sử dụng.
3.1.5. Chuyển tiếp (forwarding) hoặc tạo đường hầm (tunneling)
Chuyển tiếp hoặc tạo đường hầm là tóm lược dịch vụ dựa trên TCP khác như là Telnet hoặc IMAP
trong một phiên SSH mang lại hiệu quả bảo mật của SSH đến với các dịch vụ dựa trên TCP khác. Ví
dụ, một kết nối Telnet bình thường truyền username, password của bạn và phiên đăng nhập của bạn ở
dạng clear text. Bằng cách chuyển tiếp telnet thông qua SSH, tất cả dữ liệu sẽ tự động được mã hoá và
kiểm tra định danh và bạn có thể xác nhận dùng SSH tin cậy.
SSH hỗ trợ 3 kiểu chuyển tiếp:
 TCP port forwarding:
SSH dùng TCP/IP làm cơ chế truyền, thường dùng port 22 trên máy server khi nó mã hoá và giải mã
lưu lượng đi trên mạng. Ở đây chúng ta nói đến một đặc điểm mã hoá và giải mã lưu lựong TCP/IP

thuộc về ứng dụng khác, trên cổng TCP khác dùng SSH. Tiến trình này gọi là port forwarding, nó có
tính trong suốt cao va khá mạnh. Telnet, SMTP, NNTP, IMAP và những giao thức không an toàn khác
chạy TCP có thể được bảo đảm bằng việc chuyển tiếp kết nối thông qua SSH. Port forwarding đôi khi
được gọi là tunneling bởi vì kết nối SSH cung cấp một “đường hầm” xuyên qua để kết nối TCP khác có
thể đi qua.
Giả sử bạn có một máy H ở nhà đang chạy IMAP và bạn muốn kết nối đến một IMAP server trên máy
S để đọc và gửi mail. Bình thường thì việc kết nối này không đảm bảo an toàn, tài khoản và mật khẩu
mail của bạn được truyền đi dưới dạng clear text giữa chương trình mail của bạn và server. Đối với
SSH port forwarding, bạn có thể định tuyến lại trong suốt kết nối IMAP ( tìm cổng TCP 143 trên server
S) để truyền đi thông qua SSH, mã hoá bảo đảm dữ liệu truyền đi trên kết nối. Máy IMAP server phải
chạy một SSH server cho port forwarding để cung cấp việc bảo đảm đó.


Tuy nhiên, SSH port forwarding chỉ hoạt động trên giao thức TCP và không làm việc được trên các
giao thức khác như UDP hay AppleTalk
 X forwarding
X là một hệ thống window phổ biến đối với các trạm làm việc Unix, một trong những đặc điểm tốt
nhất của nó là tính trong suốt. Sử dụng X bạn có thể chạy ứng dụng X từ xa để mở các cửa sổ của
chúng trên màn hình hiển thị cục bộ của bạn
 Agent forwarding
SSH client có thể làm việc với một SSH agent trên cùng một máy. Sử dụng mọt đặc trưng gọi là agent
forwarding, client cũng có thể liên lạc với các agent trên những máy từ xa. Điều thuận lợi là nó cho
phép client trên nhiều máy làm việc với một agent và có thể tránh vấn đề liên quan đến tường lửa.
3.2. Kiến trúc chung của một hệ thống SSH
SSH có khoảng một bộ 12 thuộc tính riêng lẻ, các thành phần tác động lẫn nhau cho ra các nét đặc
trưng riêng.


Hình 3-1. Kiến trúc SSH
SSH cũng có khoá (keys), phiên (sessions) và những thứ ngộ nghĩnh khác. Ở đây chúng ta qui định

một bản tóm tắt tổng quan của tất cả các thành phần, ví thế bạn có thể bắt đầu thấy được bức tranh lớn
về SSH như sau:
Server
Một chương trình cho phép đi vào kết nối SSH với một bộ máy, trình bày xác thực, cấp phép, …
Trong hầu hết SSH bổ sung của Unix thì server thường là sshd.
Client
Một chương trình kết nối đến SSH server và đưa ra yêu cầu như là “log me in” hoặc “copy this
file”. Trong SSH1, SSH2 và OpenSSH, client chủ yếu là ssh và scp.
Session


Một phiên kết nối giữa một client và một server. Nó bắt đầu sau khi client xác thực thành công đến
một server và kết thúc khi kết nối chấm dứt. Session có thể được tương tác với nhau hoặc có thể là
một chuyến riêng.
Key
Một lượng dữ liệu tương đối nhỏ, thông thường từ mười đến một hoặc hai ngàn bit. Tính hữu ích
của việc sử dụng thuật toán ràng buộc khoá hoạt động trong vài cách để giữ khoá: trong mã hoá, nó
chắc chắn rằng chỉ người nào đó giữ khoá (hoặc một ai có liên quan) có thể giải mã thông điệp,
trong xác thực, nó cho phép bạn kiểm tra trễ rằng người giữ khoá thực sự đã kí hiệu vào thông điệp.
Có hai loại khóa: khoá đối xứng hoặc khoá bí mật và khoá bất đối xứng hoặc khóa công khai. Một
khoá bất đối xứng hoặc khoá công khai có hai phần: thành phần công khai và thàn phần bí mật.
SSH đề cập đến 4 kiểu của khoá như phần tóm tắt trong bảng 3-1 và diễn tả dưới đây.

Name Lifetime Created by Type

Purpose
User key Persistent User
Public
Identify a user to the server
Session key

One session
Client (and server)
Secret
Protect communications
Host key Persistent Administrator
Public
Identify a server/machine
Server key

One hour Server
Public
Encrypt the session key (SSH1 only)
Bảng 3-1. Các loại khoá thành phần
User key
Là một thực thể tồn tại lâu dài, là khoá bất đối xứng sử dụng bởi client như một sự chứng
minh nhận dạng của user ( một người dùng đơn lẻ có thể có nhiều khoá)
Host key
Là một thực thể tồn tại lâu dài, là khoá bất đối xứng sử dụng bới server như sự chứng minh
nhận dạng của nó, cũng như được dùng bởi client khi chứng minh nhận dạng host của nó như
một phần xác thực đáng tin. Nếu một bộ máy chạy một SSH server đơn, host key cũng là cái
duy nhất để nhận dạng bộ máy đó. Nếu bộ máy chạy nhiều SSH server, mỗi cái có thể có một
host key khác nhau hoặc có thể dùng chung. Chúng thường bị lộn với server key.
Server key
Tồn tại tạm thời, là khoá bất đối xứng dùng trong giao thức SSH-1. Nó đựợc tái tạo bởi
server theo chu kỳ thường xuyên ( mặc định là mỗi giờ) và bảo vệ session key. Thường bị lộn
với host key. Khoá này thì không bao giờ được lưu trên đĩa và thành phần bí mật của nó không
bao giờ được truyền qua kết nối ở bất cứ dạng nào, nó cung cấp “perfect forward secrecy” cho
phiên SSH-1
Session key



Là một giá trị phát sinh ngẫu nhiên, là khoá đối xứng cho việc mã hoá truyền thông giữa một
SSH client và SSH server. Nó được chia ra làm 2 thành phần cho client và server trong một loại
bảo bật trong suốt quá trình thiết lập kết nối SSH để kẻ xấu không phát hiện được nó.

Key generator
Một chương trình tạo ra những loại khoá lâu dài( user key và host key) cho SSH. SSH1, SSH2
và OpenSSH có chương trình ssh-keygen
Known hosts database
Là một chồng host key. Client và server dựa vào cơ sở dữ liệu này để xác thực lẫn nhau.
Agent
A program that caches user keys in memory, so users needn't keep retyping their passphrases.
The agent responds to requests for key-related operations, such as signing an authenticator, but it
doesn't disclose the keys themselves. It is a convenience feature. SSH1, SSH2, and OpenSSH have
the agent ssh-agent, and the program ssh-add loads and unloads the key cache.
Một chương trình lưu user key trong bộ nhớ. Agent trả lời cho yêu cầu đối với khoá quan hệ
hoạt động như là kí hiệu một giấy xác thực nhưng nó không tự phơi bày khoá của chúng. Nó là một
đặc điểm rất có ích. SSH1, SSH2 và OpenSSH có agent ssh-agent và chương trình ssh-add để xếp
vào và lấy ra khoá được lưu.
Signer
Một chương trình kí hiệu gói chứng thực hostbased.
Random seed
A pool of random data used by SSH components to initialize software pseudo-random number
generators.
Một dãy dữ liệu ngẫu nhiên đựoc dùng bởi các thành phần SSH để khởi chạy phần mềm sinh số
ngẫu nhiên
Configuration file
Một chồng thiết lập để biến đổi hành vi của một SSH client hoặc SSH server. Không phải tất cả
thành phần đều được đòi hỏi trong một bản bổ sung của SSH. Dĩ nhiên những server, client và khoá
là bắt buộc nhưng nhiều bản bổ sung không có agent và thậm chí vài bản không có bộ sinh khoá.

3.3. Bên trong SSH-2 :
Giao thức SSH-2 được chia làm 4 bộ phận chính, được diễn tả như 4 giao thức riêng rẽ trong nhiều
tài liệu IETF khác nhau. Theo thông thường, chúng được sắp xếp cùng với nhau để cung cấp thiết lập
các dịch vụ mà hầu hết người dùng kết hợp chúng thành một SSH-2 đầy đủ.
- Giao thức lớp vận chuyển SSH (SSH-TRANS)
- Giao thức xác thực SSH (SSH-AUTH)
- Giao thức kết nối SSH (SSH-CONN)
- Giao thức truyền file SSH (SSH-SFTP)


Hình 3-2 phác thảo việc phân chia công việc giữa các giao thức, và chúng quan hệ với nhau như thế
nào, những chương trình ứng dụng và mạng. Những chữ nghiêng là phần mở rộng giao thức.




Hình 3-2 Đặc điểm giao thức SSH-2

SSH-2 đươc thiết kế để mở rộng và modul hoá. Tất cả các giao thức lõi định nghĩa miêu tả các dịch vụ
mà chúng cung cấp và chúng phải phù hợp nhưng cho phép nhiều cơ chế có thể làm việc, cũng như là
một cach để dễ dàng thêm vào một cơ chế mới. Tất cả những tham số chủ yếu của kết nối SSH đều có thể
được thương lượng, bao gồm những thuật toán và phương thức sử dụng trong:
 Trao đổi khoá phiên
 Xác thực server
 Bảo toàn và bí mật dữ liệu
 Xác thực người dùng
 Nén dữ liệu
Client và server thương lượng việc sử dụng một thiết lập phổ biến, cho phép thao tác rộng giữa các
phần bổ sung khác nhau. Trong hầu hết các loại, giao thức định nghĩa ít nhất một phương thức để đẩy
mạnh thao tác giữa các phần xa hơn. Nên nhớ rằng điều này chỉ có nghĩa một việc tuân theo được thực

hiện đòi hỏi hỗ trợ phương thức trong đoạn mã của nó ; bất cứ một phương thức ngoại lệ nào cũng có
thể bị tăt bởi người quản trị trong một điều kiện đặc biệt nào đó. Vì thế, trên thực tế việc chứng thực
khoá công khai đòi được hỏi bởi SSH-AUTH không có nghĩa là nó luôn luôn có sẵn cho client từ bất
cứ máy nào chạy SSH server, nó chỉ có nghĩa là nó phải có sẵn và có thể được bật lên nếu cần.


3.3.1. Tóm tăt cơ chế hoạt động của SSH-2
Một phiên làm việc của SSH-2 trải qua 4 bước chủ yếu như sau:
Thiết lập kết nối ban đầu (SSH-TRANS)
Tiến hành xác thực lẫn nhau (SSH-AUTH)
Mở phiên kết nối để thực hiện các dịch vụ (SSH-CONN)
Chạy các dịch vụ ứng dụng SSH ( có thể là SSH-SFTP)

SSH-TRANS là khối xây dựng cơ bản cung cấp kết nối ban đầu, ghi chép giao thức, xác thực
server, mã hoá cơ bản và các dịch vụ bảo toàn. Sau khi thiết lập một kết nối SSH-TRANS, client có
một kết nối đơn, đảm bảo, luồng truyền byte full-duplex đến một xác nhận tương đương.
Kế đến, client có thể dùng SSH-AUTH thông qua kết nối SSH-TRANS đến xác thực của chính nó
với server. SSH-AUTH định nghĩa một cái khung đối với việc nhiều cơ chế xác thực có thể được sử
dụng, sữa chữa mọi thứ như là định dạng và những yêu cầu khác của xác thực,những điều kiện để
thành công hoặc có thể bị lỗi và làm thế nào client học được những phương thức có sẵn. Có thể là một
phương thức bất kỳ nào đó được thi hành, và giao thức cho phép trao đổi tuỳ ý một phần của bất kỳ cơ
chế riêng nào để phần mở rộng giao thức dễ định nghĩa để kết hợp chặt chẽ với bất cứ phương thức xác
thức mong muốn nào trong tương lai. SSH-AUTH chỉ yêu cầu một phương thức: khoá công cộng với
thuật toán DSS. Xa hơn nữa, nó định nghĩa hai phương thức: mật khẩu và dựa trên host. Một số
phương thức đã được định nghĩa trong nhiều bản thảo Internet khác nhau và vài bản đã được chấp nhận
rộng rãi.
Sau khi xác thực, SSH client yêu cầu giao thức SSH-CONN để cung cấp một sự đa dạng của các
dịch vụ thông qua một kênh đơn cung cấp bởi SSH-TRANS. Điều này bao gồm mọi thứ cần để hỗ trợ
nhiều phiên tương tác và phiên không tương tác: những luồng đa thành phần khác nhau (hoặc channel)
ngang qua kết nối bên dưới, quản lý X, TCP và agent forwarding, truyền tín hiệu thông qua kết nối, nén

dữ liệu và thực thi chương trình từ xa.
Cuối cùng, một ứng dụng có thể sử dụng SSH-SFTP qua một kênh SSH-CONN để cung cấp truyền file
và các chức năng thao tác hệ thống tập tin từ xa.
3.3.2. Giao thức lớp vận chuyển SSH (SSH-TRANS)
3.3.2.1. Tiến trình tạo kết nối
Để minh hoạ, chúng ta lấy một ví dụ một Client SSH chạy trên một máy Macintosh sẽ đọc cấu hình
file của nó và sau đó tạo một kết nối TCP đến phía bên đầu xa ( ví dụ đến host.foo.net) như sau:

$ ssh -vv host.foo.net
OpenSSH_3.6.1p1+CAN-2003-0693, SSH protocols 1.5/2.0, OpenSSL
0x0090702f

debug1: Reading configuration data /Users/res/.ssh/config

debug1: Applying options for com



debug1: Applying options for *

debug1: Reading configuration data /etc/ssh/ssh_config

debug1: Connecting to host.foo.net [10.1.1.1] port 22.

debug1: Connection established.
3.3.2.2. Tiến trình chọn lựa phiên bản giao thức
Càng sớm càng tốt khi server chấp nhận kết nối, giao thức SSH bắt đầu. Server thông báo phiên bản
giao thức của nó bằng một chuỗi văn bản:
Debug1: Remote protocol version 2.0, remote software version 4.1.0.34 SSH Secure Shell
Bạn có thể thấy chuỗi này trong kết nối đơn giản của bạn đến server như telnet:


$ telnet host.foo.net 22

Trying 10.1.1.1

Connected to host.foo.net

Escape character is '^]'.

SSH-2.0-4.1.0.34 SSH Secure Shell

^]

telnet> quit

Connection closed.

Định dạng của thông báo là:
SSH-<phiên bản giao thức>-<lời chú thích>
Trong trường hợp này, server dùng giao thức SSH-2 và phần mềm 4.1.0.34 của SSH từ công ty bảo
mật truyền thông (SSH Communication Security). Mặc dù trường chú thích có thể bao gồm mọi thứ
nhưng SSH server thường chỉ đưa vào đó tên và phiên bản sản phẩm. Điều này rất có ích để client
thường nhận biết chính xác server dùng sản phẩm và phiên bản gì để làm việc cho đúng và tránh lỗi
hoặc không tương thích với nhau.
Phiên bản giao thức số “1.99” có ý nghĩa đặc biêt: nó hỗ trợ cả hai giao thức SSH-1 và SSH-2.
Tiếp theo, OpenSH phân tích lời chú thích:

debug1: no match: 4.1.0.34 SSH Secure Shell




debug1: Enabling compatibility mode for protocol 2.0

debug1: Local version string SSH-2.0-OpenSSH_3.6.1p1+CAN-2003-0693

nhưng không tìm thấy một cái hợp với danh sách của nó thì nó biết là có vấn đề. Nó chọn SSH-2 (chỉ
chọn trong ví dụ này) và gửi chuỗi phiên bản của nó đến server giống như cách mà server đã gửi. Nếu
client và server đồng ý phiên bản của chúng đã tương thích thì tiến trình kết nối tiếp tục, nếu không thì
cả hai có thể kết thúc kết nối.
3.3.2.3. Tiến trình thương lượng tham số
Đã thiết lập kết nối và đồng ý trên một phiên bản, nhiệm vụ đầu tiên của SSH-TRANS là chuẩn bị
các thuộc tính bảo mật cơ bản của SSH:
o Tính bí mật (privacy)
o Tính toàn vẹn (integrity)
o Xác thực server
o Nén dữ liệu
Nhưng đầu tiên, hai bên phải đồng ý các thông số phiên, bao gồm các phương thức để đạt được các
thuộc tính. Tiến trình diễn ra trong gian đoạn này gọi là tiến trình trao đổi khoá.

Debug1: SSH2_MSG_KEXINIT sent
Debug1: SSH2_MSG_KEXINIT receive
Client gửi thông báo KEXINIT (khởi tạo tao đổi khoá) của nó và nhận một cái tữ server. Ở đây có sự
chọn lựa nó đưa cho server:

debug2: kex_parse_kexinit: gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==,

gss-group1-sha1-A/vxljAEU54gt9a48EiANQ==,
diffie-hellman-group-exchange-sha1,
diffie-hellman-group1-sha1


Thuật toán trao đổi khoá mà client hỗ trợ là:
diffie-hellman-group1-sha1
Thuật toán này được định nghĩa và yêu cầu bởi SSH-TRANS, chỉ rõ cho biết là dùng thủ tục Diffie-
Hellman để thoả thuận khoá cùng với những tham số cụ thể khác (Oakley Group 2 và thuật toán băm
SHA-1)
diffie-hellman-group-exchange-sha1
Tương tự, nhưng cho phép client chọn từ một danh sách các nhóm tham số, địa chỉ liên quan về những
khả năng có thể bị tấn công dựa trên một nhóm được bố trí trước, định nghĩa trong tài liệu phác thảo
IETF “secsh-dh-group-exchange”

gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==
gss-group1-sha1-A/vxljAEU54gt9a48EiANQ==



Những các tên trông kỳ quặc là được mã hóa Base64 - chúng hiển thị hai giá trị khác nhau của xác
thực Kerberos, trao đổi Diffe-Hellman. Một cơ sở hạ tầng Kerberos có sẵn cung cấp xác thực server tự
động và linh hoạt mà không cần xác nhận SSH host key và file known-host riêng. Xác thực Kerberos
được cung cấp bởi GSSAPI và những tên phía sau là mã hóa Base64 của hàm băm MD5.
Trong điều kiện tóm tắt của thỏa thuận, một thuật toán trao đổi khoá SSH có hai đầu ra :
o Một share secret, K
o Một “exchange hash”, H
K là tham số bí mật chính đối với phiên: SSH-TRANS định nghĩa một phương thức đối với secret K từ
những nguồn gốc khoá khác nhau và những tham số mã hoá khác cần thiết cho việc mã hoá cụ thể và
thuật toán toàn vẹn dữ liệu được sử dụng trong kết nối SSH. Exchange hash H thì không bí mật, mặc
dù nó không cần thiết để lộ ra và nó là duy nhất trong mỗi phiên .
Trao đổi khoá cũng diễn ra trên xác thực server để đề phòng việc giả mạo và tấn công man-in-the-
middle và có thể được lặp lại trong một kết nối để thay thế một cái cũ hoặc xác thực lại server.
Tiếp theo, client cung cấp một kiểu SSH host key mà nó có thể cháp nhận :


debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,null

Trong trường hợp này, nó cung cấp RSA, DSA và null đối với trường hợp không có khoá. Nó bao gồm
cả null bởi vì nó hỗ trợ Kerberos cho xác thực host. Nếu dùng trao đổi khoá Kerberos thì không có SSH
host key nào cần thiết đối với việc xác thực server.
Sau đó, client liệt kê những thuật toán mã hoá dữ liệu mà nó hỗ trợ :

debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-
cbc,arcfour,
aes192-cbc,aes256-cbc,

Dữ liệu chính thì không bao giờ được mã hoá trực tiếp với phương thức khoá công khai như RSA hoặc
DSA bởi vì chúng làm qua chậm. Thay vào đó, chúng ta sử dụng một thuật toán khoá đối xứng như
trong danh sách phia trên để bảo vệ khoá phiên đối với việc mã hoá bằng phương thức khoá công khai
nếu thích hợp.
Kế đến, client hiển thị danh sách các thuật toán toàn vẹn dữ liệu mà nó có sẵn:

debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,
,hmac-sha1-96,hmac-md5-96

Thuật toán toàn vẹn được ứng dụng để mỗi thông điệp được gửi bởi giao thức hồ sơ SSH cùng với một
chuỗi số và một khoá phiên toạ ra một mã xác nhận thông điệp (MAC:message authentication code)
được thêm vào mỗi thông điệp. Bên nhận có thể dùngg MAC và bản sao chép khoá phiên của nó để
kiểm tra thông điệp không bị biến đổi trên đường truyền, không bị truyền lặp lại và không phải là do
một phiên khác gửi tới, đó là những thuộc tính của toàn vẹn dữ liệu.
Cuối cùng, client cho biết kỹ thuật nén dữ liệu mà nó hỗ trợ:



debug2: kex_parse_kexinit: none,zlib


Sau khi gửi thông điệp thoả thuận của nó, client cũng nhận từ server danh sách các tham số mà server
hỗ trợ:
debug2: kex_parse_kexinit: diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-dss,x509v3-sign-rsa
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,twofish128-
cbc,cast128-cbc,
twofish-cbc, blowfish-cbc,aes192-cbc,aes256-cbc,
twofish192-cbc,twofish256-cbc,arcfour

debug2: kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-
96

debug2: kex_parse_kexinit: none,zlib

Kế đến, mỗi bên chọn các thuật toán tương ứng từ các thuật toán hõ trợ của bên kia:
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
Trong trường hợp này, việc chọn lựa trên cả hai bên là giống nhau. Tuy nhiên, chúng không cần
thiết phải giống. Việc mỗi bên chọn lựa một thuật toán hay một khoá độc lập với nhau cũng không có
hại gì.
3.3.2.4. Tiến trình trao đổi khoá và xác thực server
Tại thời điểm này, chúng sẵn sàng để đưa ra danh sách trao đổi khoá:

debug2: dh_gen_key: priv key bits set: 131/256
debug2: bits set: 510/1024
debug1: sending SSH2_MSG_KEXDH_INIT

Client chọn mọt thuật toán trao đổi khoá từ bộ thông báo của server, trong trường hợp này thì server
chỉ đưa ra có một cái. Nó sinh ra một khoá tạm thời như một phần của thuật toán Diffe-Hellman và gửi

thông điệp khởi tạo của trao đổi diffie-hellman-group1-sha1, cùng lúc đó server biết được
phương thức mà hai bên sử dụng và bắt đầu trao đổi.
Tiếp theo, client đợi và server gửi thông điệp KEXDH_INIT của chúng:
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Host 'host.foo.net' is known and matches the DSA host key.
debug1: Found key in /Users/res/.ssh/known_hosts:169
debug2: bits set: 526/1024

debug1: ssh_dss_verify: signature correct



Bao gồm trong phần trả lời của server là khoá công khai SSH của nó, cùng với một chữ kí cung cấp
khoá bí mật tương ứng mà nó giữ. Dĩ nhiên cữ kí sẽ được kiểm tra nhưng không có ý nghĩa quan trọng,
bước quan trọng ở đây là kiểm tra định danh khoá công khai của server. Trong ví dụ này, client tìm một
bản kết hợp tên foo.host.net với khoá được cung cấp bởi server.
SSH-2 hỗ trợ hệ thống PKI (Public Key Infrastructure) để kiểm tra khoá công khai, định nghĩa một số
kiểu khoá bao gồm gắn với giấy xác thực :

ssh-rsa Plain RSA key
ssh-dss Plain DSS key
x509v3-sign-rsa X.509 certifivates (RSA key)
x509v3-sign-dss X.509 certificates (DSS key)
spki-sign-rsa SPKI certificates (RSA key)
spki-sign-dss SPKI certificates (DSS key)
pgp-sign-rsa OpenPGP certificates (RSA key)
pgp-sign-dss OpenPGP certificates (DSS key)

3.3.3. Giao thức chứng thực SSH (SSH_AUTH)
3.3.3.1. Tiến trình yêu cầu chứng thực

Quá trình chứng thực được client bắt đầu bằng yêu cầu chứng thực và server hồi đáp lại. Một yêu
cầu chứng thực bao gồm những phần như sau:
 Username U: là định danh giấy phép của client.
 Tên dịch vụ S: những việc mà client yêu cầu được truy cập, bắt đầu hoạt động thông qua kết nối
SSH-TRANS sau khi chứng thực thành công. Có thể có nhiều dịch vụ có sẵn nhưng thông thường chỉ
có một “ssh-connection” yêu cầu truy cập đến những dịch vụ cung cấp khác nhau thông qua giao thức
SSH-CONN: đăng nhập, thi hành lệnh từ xa, chuyển tiếp cổng và tất cả những thứ khác mà người sử
dụng muốn làm với SSH.
 Tên phương thức M, và phương thức dữ liệu cụ thể D : phương thức xác thực cụ thể được dùng
trong yêu cầu là “pasword” hoặc “publickey” và phương thức dữ liệu cụ thể truyền bất cứ thứ gì cần
thiết để bắt đầu trao đổi chứng thực rõ ràng, ví dụ, một mật khẩu được kiểm tra bởi server. Như là tên
khoá trao đổi trong SSH-TRANS thì tên có cú pháp “@domain” có thể được dùng bởi bất cứ ai để thực
hiện phương thức cục bộ, trong khi những tên không có @ phải được đăng kí tên toàn bộ các phương
thức chứng thực SSH.
Mỗi khi phương thức chứng thực bắt đầu, nó có thể bao gồm bất kỳ một số kiểu thông điệp chi tiết nào
khác mà nó cần. Hoặc trong trường hợp đơn giản, dữ liệu mang bởi yêu cầu ban đầu cũng đã đủ và
server có thể hồi đáp đúng như thể. Trong bất cứ trường hợp nào, sau khi yêu cầu và sau vài phương
thức thông điệp theo sau đó thì server cấp phát một hồi đáp chứng thực.


3.3.3.2. Tiến trình hồi đáp chứng thực
Một hồi đáp chứng thực có hai trạng thái: Thành công và thất bại. Một thông báo thành công không
mang dữ liệu nào khác ngoài thông báo là xác thực đã thành công và dịch vụ yêu cầu đã được bắt đầu.
Thêm nữa, thông báo SSH-TRANS được client gửi được định nghĩa cùng với giao thức của dịch vụ và
SSH-AUTH được chạy .
Một thông báo lỗi có sẽ có cấu trúc hư sau:
 Một danh sách các phương thức chứng thực có thể tiếp tục
 Một cờ “ partial success”
Nếu cờ partial success không bật lên thì thông báo đó có nghĩa là những phương thức chứng thực
trước đó đã bị lỗi. Nếu cờ partical được bật lên thì thông báo có nghĩa là phương thức đã thành công,

tuy nhiên, server yêu cầu phải bổ sung những phương thức còn bị lỗi khác cho thành công trươc khi
đồng ý cho truy cập.
3.3.3.3. Chứng thực khoá công khai
Một yêu cầu chứng thực khoá công khai mang phương thức có tên là “publickey” và có thể có nhiều
dạng khác nhau phụ thuộc vào một cờ được thiết lập. Một dạng của phương thức này là:
 flag = FALSE
 Tên thuật toán
 Dữ liệu khoá
Thuật toán khoá công khai có thể dùng là những thuật toán thiết lập trong SSH-TRANS và định dạng
dữ liệu khoá phụ thuộc vào kiểu khoá như ssh-dss hay ssh-rsa.
Với cờ thiết lập là FALSE, thông báo này chỉ đơn thuần là kiểm tra xác thực: nó yêu cầu server kiểm
tra khoá này có được xác thực để truy cập như mong muốn của tài khoản hay không, nếu được thì gửi
lại một thông báo cho biết. Nếu khoá không được xác thực, hồi đáp có giá trị FALSE đơn giản.
Sau khi xác nhận khoá và gửi thông báo thành công, server cho biết đã chấp nhận truy cập và kết thúc
phiên SSH-AUTH.
3.3.3.4. Xác thực password
Phương thức mật khẩu thì rất đơn giản: nó tên là “password”. Phương thức này chỉ có trong một số
bản bố sung của SSH2. Sau khi kiểm tra các tham số thích hợp, server sẽ gửi thông báo chấp nhận truy
cập của client và nếu có giao thức này thì server sẽ gửi kết hợp password với thông báo đó để xác thực
với client.
3.3.3.5. Xác thực dựa trên host (hostbased)
Cũng là một phương thức của một số bản bổ sung. Phương thức này dùng để server xác thực client
mà nó đã nhận yêu cầu có đúng hay không dựa trên tên máy. Giả sử rằng bạn ở máy A gửi yêu cầu đến
server nhưng không đi trực tiếp đến server mà trên đường truyền phải đi qua máy B thì server không
kiểm tra máy B mà sẽ kiểm tra xem có phải bên gửi yêu cầu truy cập đến nó có phải là máy A hay
không.
3.3.4. Giao thức kết nối SSH-CONN


Khi yêu cầu xác thực thành công, client se có một dịch vụ tên “ssh-con” nhưng nó không hiển thị

trên client mà hiển thị trên server như sau:
debug1: userauth-request for user res service ssh-connection method
publickey
Server bắt đầu chạy dịch vụ và hai bên đi đến giao thức kết nối SSH
3.3.4.1. Kênh (channels)
Dịch vụ cơ bản SSH-CONN cung cấp là multilexing. SSH-CONN điều khiển một kênh đơn, bảo
đảm, luồng byte đôi được cung cấp bởi SSH-TRANS và cho phép client tạo những kênh luận lý SSH-
CONN khác chạy qua nó. Kênh được nhận dạng bằng số kênh và có thể được tạo hoặc huỷ bỏ bởi
client hoặc server. Kênh là một điều khiển lưu lượng riêng lẻ và mỗi kênh có một kiểu kênh được định
nghĩa theo mục đích sử dụng. Kiểu được định nghĩa như sau:
 session: Đơn thuần chỉ là mở một kênh phiên chứ không bắt đầu chạy một chuơng trình.Một
phiên SSH-CONN có thể có nhiều kênh phiên, hỗ trợ đồng thời, ví dụ cùng chạy giao thức truyền file
và thực thi chương trình trên một phiên SSH-CONN.
 x11: một kết nối X11 client.
 orward-tcpip: một kết nối bên trong để chuyển tiếp một cổng ở xa. Khi một kết nối đến trên một
cổng TCP chuyển tiếp ở xa, server sẽ mở kênh này trở lại client để mang kết nối.
 direct-tcpip: một kết nối TCP bên ngoài. Kết nối trực tiếp này đến mở một kết nối TCP ở một
socket định sẵn và thêm kênh đến kết nối đó. Socket có thể dùng một tên miền hoặc địa chỉ IP
3.3.4.2. Yêu cầu (request)
Thêm vào một dãy kênh hoạt động- mở, đóng, gủi dữ liệu, gửi dữ liệu khẩn cấp,…SSH-CONN định
nghĩa một thiết lập cho yêu cầu với tính đầy đủ hoặc chỉ là một kênh bộ phận. Một yêu cầu đầy đủ ảnh
hưởng đến toàn bộ trạng thái của kết nối trong khi một yêu cầu kênh (bộ phận) chỉ được mở một kênh
cụ thể.
Yêu cầu dầy đủ là:
 tcpip-forward: yêu cầu một cổng chuyển tiếp TCP đằng xa
cancel-tcpip-forward: huỷ bỏ một chuyển tiếp từ xa
 pty-req: chỉ định một pty, bao gồm kích cỡ cửa sổ và kiểu thiết bị đầu cuối.
 x11-req: cài đặt chuyển tiếp x11
 env: thiết lập một biến điều kiện.
 shell, exec, subsystem: chạy tiện ích tài mặc định của tài khoản, một chương trình tuỳ ý, hoặc

một dịch vụ đơn giản.
 window-change: thay đổi kích thước cửa sổ thiết bị đầu cuối
 xon-xoff: dùng điều khiển bên client
 signal: gửi một tín hiệu đặc biệt đến một tiến trình ở xa.
 exit-signal: trả về một tín hiệu kết thúc chương trình.

Khi SSH-CONN chạy, client gửi yêu cầu và mở một kênh phiên. Sau đó gửi một số yêu cầu muốn
thực hiện thông qua các kênh…
Bây giờ thì client đã đăng nhập thành công vào máy chủ SHH từ xa.


3.4. Bên trong SSH-1
SSH-1 cũng tương tự như SSH-2 nhưng có một số điểm khác,chúng ta sẽ so sánh những đặc điểm
đó với SSH-2 để hình dung SSH-1:
 non-modular: SSH-1 được định nghĩa như một giao thức nguyên đơn, còn SSH-2 được thiết kế
modul hoá.
 less negotiation: SSH-1 có nhiều tham số cố định, thực ra, chỉ có kích thước mã hoá là được thương
lượng. Thuật toán nhận dạng, kiểu khoá host, phương thức trao đổi khoá,…tất cả đều cố định.
 ad hoc naming: SSH-1 không có cú pháp định nghĩa tên linh hoạt như SSH-2 và không có phần
mở rộng bổ sung rõ ràng.
 Single authentication: Quá trình xác thực user của SSH-1 chỉ cho phép một phương thức hoạt
động thành công, Server không thể yêu cầu nhiều phương thức.
 RhostsRSA authentication: Xác thực RhostsRSA của SSH-1 tương tự như xác thực dựa trên host về
cơ bản là có giới hạn khi sử dụng địa chỉ mạng làm định danh máy client.
 Less flexible remote forwarding: SSH-1 chỉ rõ chuyển tiếp từ xa chỉ trên một cổng, vì thế không
thể đưa nhiều địa chỉ khác nhau đến một server.
 weaker integrity checking: SSH-1 sử dụng phương thức kiểm tra toàn vẹn không mạnh lắm, đó là
thuật toán CRC-32.
 erver keys: Tiến trình trao đổi khoá cố định của SSH-1 giao cho một khoá bất đối xứng gọi là
server key, server key là một cặp khoá public/private tạm thời, sau một giờ lại được phục hồi và sử

dụng để cung cấp tính kín đáo chuyển tiếp cho khoá phiên. Kín đáo chuyển tiếp nghĩa là thậm chí việc
bảo mật thời gian dài như khoá bí mật host hoặc user được thoả hiệp trễ, không dùng mã hoá phiên
SSH trong các bước trước đó, sử dụng một khoá này thì nó không bao giờ được ghi lên đĩa. Thuật toán
Diffe-Hellman dùng trong tất cả ứua trình trao đổi khoá của SSH-2 cung cấp tính bí mật chuyển tiếp
bởi chính nó vì thế không cần server key.
 weak key exchange: Tiến trình trao đổi khoá SSH-1 bảo mật không cao vì chỉ một mình client chọn
khoá phiên và gửi đến server.
3.5. Giới thiệu các thuật toán sử dụng trong SSH
3.5.1. Những thuật toán khoá công khai
3.5.1.1 Rivest-Shamir-Adleman (RSA)
Thuật toán khóa public RSA là kiểu tính toán không đối xứng được sử dụng rộng rãi nhất. Nó bắt
nguồn từ sự phân tích thành thừa số của nhiều số nguyên là tích của 2 số nguyên tố gần bằng nhau.
Sự phân tích thành thừa số được tin dùng rộng rãi vì sự phức tạp, mặc dù chưa được chứng minh. RSA
có thể được dùng cả cho việc mã hóa và chữ ký.
Đến tháng 9 năm 2000, RSA được yêu cầu cấp bằng sáng chế tại Mỹ bởi Public Key Partners Inc
(PKP) , 1 công ty mà RSA Security Inc là 1 đối tác. Khi bằng sáng chế có hiệu lực, PKP muốn kiểm
soát việc sử dụng thuật toán RAS ở Mỹ, và việc sử dụng trái phép là phạm luật. Đến giữa những năm
1990, RSA Security cung cấp miễn phí RSAref, với bản quyền cho phép ngành giáo dục và thương
mại sử dụng (cũng như phần mềm được bán ra phi lợi nhuận). Từ đó RSA trở nên phổ biến, RSAref
không còn tồn tại.


Giao thức SSH-1 chỉ sử dụng RSA. SSH-2 có thể sử dụng nhiều thuật toán public-key, nhưng mặc định
chỉ là thuật toán DSA . Nhóm SECSH đã thêm thuật toán RAS vào SSH-2 không lâu sau khi sáng chế
hết hiệu lực.

Hình 3.2 . Hoạt động của scp
3.5.1.2 Thuật toán chữ kí số (DSA)
Thuật toán chữ ký số được phát triển bởi cơ quan an ninh quốc gia Mỹ (NSA) và được công bố bởi
viện tiêu chuẩn và công nghệ quốc gia Hoa Kỳ và trở thành chuẩn chữ ký số (DSS). DSS được đưa ra

như là một chuẩn xử lý thông tin liên bang, FIPS-186 vào tháng 5 năm 1994. Nó là một thuật toán
public-key phụ thuộc vào phương pháp Schnorr và ElGamal, dựa vào độ khó của việc tính toán riêng rẽ
các logarit trong một trường có giới hạn. Nó được thiết kế là một chữ ký không dùng cho mã hóa, mặc
dù bản bổ xung đầy đủ có thể thực thi dễ dàng với cả 2 loại mã hóa RSA và ElGarmal.
DSA cũng bị cuốn vào 1 cuộc tranh cãi kể từ khi nó ra đời. Ban đầu, NIST cho rằng họ đã thiết kế ra
DSA, nhưng sau đó họ tiết lộ là NSA đã tạo ra nó. Rất nhiều câu hỏi xoay quanh NSA. Researcher Gus
Simmons phát hiện ra 1 phần trong DSA cho phép tạo lỗ hổng rò rỉ thông tin, ví dụ các bit khóa bí mật
kèm theo mỗi chữ ký. Khi thuật toán được dùng trong trong các thẻ thông minh trong chương trình
Capstone của chính phủ, nhiều người vẫn còn nghi ngờ. Cuối cùng NIST dành DSA miễn phí cho mọi
người dùng. Đến sau cùng, nó được sáng chế bởi David Kravitz (sáng chế #5,231,668), sau đó một
nhân viên của NSA đã chuyển sáng chế này cho chính phủ Mỹ. Tuy nhiên, cũng có những yêu cầu,
rằng DSA xâm phạm bằng sáng chế, bao gồm cả sáng chế Shnorr. Cho đến giờ vẫn chưa có sự thay đổi
nào từ tòa án.
Giao thức SSH-2 cần phải sử dụng DSA để xác nhận host.
3.5.1.3 Thuật toán thoả thuận khoá Diffie-Hellman
Thuật toán Diffie-Hellman được giới thiệu lần đầu tiên trong thư viện mở, được sáng tạo bởi
Whitfield Diffie, Martin Hellman va Ralph Merkle vào năm 1976, được cấp bằng sáng chế năm 1977
(phát hành vào năm 1980, số #4,200,770) giờ thì bằng sáng chế đã hết hạn. Cũng giống như DSA, nó


dựa vào sự rời rạc của bài toán logarit, nó cho phép 2 bên lấy được 1 khóa chia sẻ an toàn trên 1 kênh
mở. Các phần trao đổi các thông điệp với nhau, sau cùng chúng chia sẻ 1 khóa bí mật. 1 kẻ rình mò
không thể lấy được thông tin từ quá trình này.
Giao thức SSH-2 cần phải dùng thuật toán Diffie-Hellman trong phương thức trao đổi khóa.
3.5.2. Những thuật toán khoá bí mật
3.5.2.1. Thuật toán mã hoá dữ liệu bí mật quốc tế (IDEA)
IDEA được thiết kế năm 1990 bởi Xuejis Lai và James Massey và trải qua nhiều lần sửa chữa, cải
tiến và đổi tên trước khi có dạng như hiện nay. Mặc dù tương đối mới nhưng nó là thuật toán bảo mật
khá tốt. Những trang web có thể tìm thông tin về nó là:



3.5.2.2. Chuẩn mã hoá tiên tiến (AES)
Năm 1997, NIST bắt đầu một chương trình thay thế thuật toán mã hoá đối xứng chuẩn đang có là
DES. Thuật toán này được thiết kế bởi Joan Daemen và Vincent Rijmen và ban đầu nó được gọi là
Rijndael và sau trở thành Advanced Encryption Standard (AES). AES là một thuật toán mã hoá khối bí
mật với chiều dài khoá có thể là 128, 192, hoăc 256 bits. Website tham khảo:

3.5.2.3. Chuẩn mã hoá dữ liệu (DES)
Chuẩn mã hoá dữ liệu là bản cũ của thuật toán mã hoá bí mật và bây giờ nó được thay thế bằng
AES. DES được thiết kế bởi các nhà nghiên cứu của IBM vào đầu những năm 1970 với cái tên la
Lucifer
3.5.2.4. Trible-DES (3DES)
Trible DES hoặc 3DES là một dạng khác của DES dùng để tăng tính bảo mật bằng việc tăng chiều
dài khoá. Làm tăng tính bảo mật của thuật toán DES bằng việc mã hoá nhiều 3 lần những khoá độc lập.
Là thuật toán mã hoá dạng plantext với sự lặp lại thuật toán DES 3 lần. Chiều dài khoá của 3DES là
112 bit lớn hơn nhều so với 56 bit của DES.
3.5.2.5. ARCFFOUR (RC4)
Ron Rivest thiết kế thuật mã hoá RC4 năm 1987 cho bảo mật dữ liệu RSA. Lúc đó nó có tên là
RSADSI. Năm 1994, nó được biết đến với tên RC4 hay ARCFOUR. RC4 thì mã hoá rất nhanh nhưng
không bảo mật bằng những thuật toán khác. Nó sử dụng kích thước khoá biến đổi. SSH-1 áp dụng RC4
với chiều dài khoá 128 bit.
3.5.2.6. Blowfish
Blowfish được thiết kế bởi Bruce Schneier năm 1993, nó từng bước thay thế thuật toán DES. Nó
nhanh hơn DES và IDEA nhiều nhưng không bằng RC4, Blowfish là một thuật toán mã hoá miễn phí


không đăng kí bản quyền. Chiều dài khoá của Blowfish thay đổi từ 32 đến 448 bit. SSH-2 sử dụng
Blowfish với chiều dài khoá là 128 bit. Có thể tham khảo thêm về Blowfish tại:

3.5.2.7. Twofish

Twofish là một thuật toán mã hoá được Bruce Schneier thiết kế cùng với J.Kelsey, D.Wagner,
C.Hall và N. Ferguson. Nó được đón nhận năm 1998 và thay thế DES ở Mỹ. Đây cũng là một thuật
toán mã hoá miễn phí cho mọi người. Twofish mã hoá với chiều dài khoá 128, 192, hoặc 256 bít. SSH-
2 sử dụng 256 bit. Nó rất nhanh và cũng có tính bảo mật khá cao. Website:

3.5.2.8. CAST
CAST được thiết kế vào đầu những năm 1990 bởi Carlisle Adams và Stafforf Tavares. CAST sử
dụng chiều dài khoá 128 hoặc 256 bit. Trong SSH-2, CAST được sử dụng với chiều dài khoá là 128 bit
3.5.3. Những hàm băm
3.5.3.1. CRC-32
Thuật toán 32-bit Redundancy Check (CRC-32) được định nghĩa trong ISO 3309, là một hàm băm
không mã hoá đối với việc dò tìm lỗi thay đổi dữ liệu. Giao thức SSH-1 sử dụng CRC-32 cho việc
kiểm tra toàn vẹn dữ liệu và đề phòng hình thức tấn công “insertion attack” (tấn công bằng cách chèn
mã độc vào dữ liệu).
3.5.3.2. MD5
MD5 (Message Digest algorithm number 5) là một thuật mã hoá mạnh, là thuật toán băm 128 bit
được thiết kế bởi Ron Rivest năm 1991, MD5 cũng là một thuật toán công cộng không đăng kí bản
quyền.
3.5.3.3. SHA-1
SHA-1 (Secure Hash Algorithm 1) được thiết kết bởi NSA và NIST . Cũng giống như MD5, nó
được cải tiến từ MD4 nhưng cải tiếp theo một cách khác. Nó cung cấp hàm băm 160 bit. Xét về bảo
mật thì nó mạnh hơn MD5 vì giá trị băm dài hơn. SSH-2 sử dụng SHA-1 để băm MAC còn SSH-1 thì
sử dụng MD5.
3.5.3.4. RIPEMD-160
RIPEMD-160 là một bản khác của MD4, đựợc phát triển bởi Hans Dobbertin, Antôn Boselaers và
Bart Preneel trong một phần của dự án RIPE truyền thông Châu Âu từ tháng 6 năm 1987 đến tháng 12
năm 1995. RIPEMD-160 không được định nghĩa trong giao thức SSH nhưng nó được dùng trong bản
bổ sung OpenSSH, RIPEMD-160 cũng là một thuật toán phiễn phí cho mọi người, Có thể tham khảo
thêm tại:


3.5.3.5. Thuật toán nén: Zlib


Zlib là thuật toán nén dữ kiệu duy nhất được định nghĩa cho SSH. Website tham khảo:

3.6. Các mối đe doạ mà SSH có thể đánh trả
Cũng giống như bất kỳ công cụ bảo mất nào, SSH có những mối đe dọa chống lại các ảnh hưởng
của nó và các chương trình khác không định địa chỉ. Chúng ta sẽ thảo luận về hình thức này đầu tiên.
3.6.1. Eavesdropping
Một eavesdropper là một người rình mò trên mạng, có thể biết được giao thông mạng mà không
làm ảnh hưởng đến đường truyền. Hình thức mã hóa của SSH chống lại eavesdropping. Nội dung của
một session SSH , ngay cả khi bị chặn, cũng không thể bị giải mã bởi một “kẻ rình mò”.
3.6.2. Dịch vụ đặt tên và giả mạo IP
Nếu một kẻ tấn công phá hoại dịch vụ đặt tên (DNS, NIS, …), các chương trình liên quan đến mạng
có thể bị ép buộc kết nối đến máy tính khác. Cũng tương tự, một kẻ tấn công có thể giả mạo một host
bằng cách đánh cắp địa chỉ IP đang dùng. Trong các trường hợp khác, bạn cũng sẽ gặp rắc rối: các
chương trình trên máy khách có thể kết nối sai đến máy chủ, đánh cắp mật khẩu mà bạn cung cấp.
Trình bảo vệ SSH chống lại kiểu tấn công này bằng cách kiểm tra mã hóa và nhận dạng máy chủ. Khi
cài đặt một session, máy khách SSH kiểm tra tính hợp lệ khóa của máy chủ dựa vào danh sách cục bộ
kết hợp với tên máy chủ và các địa chỉ cùng với khóa của chúng. Nếu khóa mà Host cung cấp không
đúng với trong danh sách, SSH sẽ cảnh báo. Tính năng này có thể bị vô hiệu hóa trong một số ít các
thiết lập an ninh khi mà các thông báo cảnh báo gây khó chịu.
Giao thức SSH-2 cho phép bao gồm chứng nhận PKI cùng với các khóa. Trong tương lai, chúng ta hi
vọng sự bổ xung tính năng này vào các sản phẩm SSH cùng với nhiều sự triển khai phổ biến của PKI
sẽ xóa đi gánh nặng quản trị khóa và giảm bớt sự cần thiết cho sự thỏa hiệp an ninh nói riêng này.
3.6.3. Chiếm đoạt kết nối
Một kẻ tấn công lanh lợi không chỉ có thể theo dõi được giao thông mạng, mà còn có thể xen vào,
chiếm đoạt một kết nối TCP, đánh cắp nó theo nghĩa đen từ một điểm cuối hợp pháp. Đây là các tai hại
rõ ràng: dù cho phương thức xác nhận của bạn có tốt như thế nào đi nữa, kẻ tấn công có thể đơn giản là
đợi cho đến khi bạn đăng nhập, sau đó đánh cắp kết nối và chèn các lệnh bất chính của hắn vào trong

session của bạn. SSH không thể chống lại kiểu chiếm quyền điều khiển này, từ đó trở đi đây trở thành
điểm yếu trong TCP hoạt động bên dưới SSH. Tuy nhiên, SSH đáp trả không hiệu quả (trừ kiểu tấn
công từ chối dịch vụ). Trình kiểm tra tính toàn vẹn của SSH phát hiện một session có bị sửa đổi hay
không, và ngắt kết nối ngay lập tức mà không sử dụng bất kỳ dữ liệu bị sửa đổi nào.
3.6.4. Các kiểu tấn công Man-in-the-Middle
Kiểu tấn công người dùng ở giữa là kiểu tấn công chủ động đặc biệt không dễ bị phát hiện và được
mô tả trong phần 3-5. Một đối thủ ngồi giữa bạn và người ngang hàng thực sự (ví dụ giữa máy khách
SSH và máy chủ), chặn tất cả sự qua lại và thay đổi hoặc xóa những thông báo. Hãy tưởng tượng rằng
bạn cố gắng kết nối đến một máy chủ SSH, nhưng Mary “hiểm độc” chặn kết nối của bạn. Cô ấy cư xử
giống như một máy chủ SSH, dù cho bạn không để ý, cô ấy kết thúc chia sẻ khóa session với bạn.


Đồng thời, cô ấy cũng bắt đầu tạo kết nối của chính cô ấy đến máy chủ mong đợi của bạn, thu về được
khóa session riêng biệt với máy chủ. Cô ấy có thể đăng nhập giống như bạn bởi vì bạn sử dụng
password hợp lệ và vì vậy cũng là đưa cho co ấy password của bạn. Bạn và máy chủ đều nghĩ là đang
kết nối đến nhau, nhưng thực tế thì cả 2 đang kết nối đến Mary. Sau đó cô ấy chỉ cần ngồi giữa, truyền
dữ liệu ngược lại và tới lui giữa bạn và máy chủ (giải mã một bên với một khóa và mã hóa lại với cái
khác dùng để truyền lại). Tất nhiên, cô ấy có thể đọc mọi thứ đi qua và sửa lại theo ý muốn.

Hình 3.3 . Man-in-the-Middle attack
SSH chống lại kiểu tấn công này theo 2 cách. Đầu tiên là xác nhận máy chủ. Nếu Mary không chặn
bên trong máy chủ, cô ấy không thể mạo nhận, bởi vì cô ấy không có khóa riêng của máy chủ. Lưu ý
rằng, để sự bảo vệ này hoạt động, trên thực tế máy khách phải kiểm tra khóa public mà máy chủ cung
cấp dựa vào danh sách host mà nó biết, nếu không thì sẽ không có bảo đảm rằng máy chủ là thật. Nếu
bạn kết nối lần đầu tiên đến một máy chủ mới và để cho SSH chấp nhận khóa của host, thực tế là bạn
đang mở ra 1 kiểu tấn công “Người ở giữa”. Tuy nhiên, cứ cho rằng bạn không bị lừa vào lúc này,
nhưng các kết nối trong tương lai đến máy chủ này chỉ an toàn cho đến khi khóa host server bị đánh
cắp.
Khả năng bảo vệ SSH thứ 2 là qua phương thức người dùng xác thực. Phương pháp password hiển
nhiên là dễ bị tấn công, nhưng khóa public và sự xác thực dựa trên máy chủ sẽ chống lại kiểu các tấn

công MITM. Mary không thể phát hiện ra khóa session một cách dễ dàng thông qua việc trao đổi khóa,
cô ấy phải thực hiện một cuộc tấn công chủ động để trao đổi riêng biệt với mỗi bên, thu về các khóa
riêng biệt của riêng cô ấy với máy khách và máy chủ. Trong cả 2 giao thức SSH-1 và SSH-2, sự trao
đổi khóa được thiết kế sao cho nếu cô ấy thực hiện điều này, thì sự nhận dạng session ở mỗi phía sẽ
khác nhau. (Điều này không có ở giao thức SSH-1 cũ).
Nếu bạn không xác nhận tên/khóa của máy chủ tương ứng, Mary vẫn có thể thực hiện kiểu tấn công
“người ở giữa”, thậm chí dù cô ấy không thể đăng nhập như chính bạn ở phía máy chủ. Cô ấy có thể
đăng nhập vào tài khoản của cô ấy hoặc của người khác mà cô ấy đã lấy được. Với sự lanh lợi, cô ấy
vẫn sẽ có thể đánh lừa bạn đủ lâu để phá hoại.
3.7. Các mối đe doạ mà SSH không thể ngăn cản

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×