Tải bản đầy đủ (.docx) (27 trang)

Báo Cáo Bảo Mật Thông Tin SSH

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 (542.15 KB, 27 trang )

CHƯƠNG 1: GIỚI THIỆU VỀ GIAO THỨC SSH.
1. Khái Niệm Về Ssh
SSH là một giao thức để đăng nhập từ xa an toàn và các dịch vụ mạng an
toàn khác qua mạng khơng an tồn (RFC 4251).
Được phát triển bởi Tatu Ylăonen (i hc Helsinki ca Phn Lan), sau ú
c thương mại hóa bởi SSH Communications Security Corp., Phần Lan.
Hai bản phân phối có sẵn:
• phiên bản thương mại
• phần mềm miễn phí (www.openssh.com)
SSH2 được chỉ định trong một tập hợp các bản nháp Internet (RFC 4250 - 4256).
2. Kiến trúc giao thức Secure Shell (SSH)
Giao thức SSH bao gồm ba thành phần chính:
• Giao thức lớp truyền tải SSH - cung cấp xác thực máy chủ, tính bảo mật và tính
tồn vẹn với tính bảo mật chuyển tiếp hồn hảo • Giao thức xác thực người dùng
SSH - xác thực máy khách với máy chủ
• Giao thức kết nối SSH - ghép kênh được mã hóa thành một số kênh logic (cho
phép phiên trình bao an tồn, chuyển tiếp / đường hầm cổng TCP, v.v.)

Hình 1: Ngăn xếp giao thức SSH (nguồn: cisco.com).
1


3. Giao thức lớp truyền tải SSH - Tổng quan
SSH TLP thường chạy trên TCP / IP; khi được sử dụng qua TCP, máy chủ
thường lắng nghe các kết nối trên cổng 22. Cung cấp:
• mã hóa dữ liệu người dùng
• xác thực máy chủ (dựa trên / các khóa máy chủ khơng đối xứng) • bảo vệ tính
tồn vẹn (nguồn gốc và dữ liệu)
• nén dữ liệu trước khi mã hóa (tùy chọn)
Phương pháp trao đổi khóa, thuật tốn khóa cơng khai, thuật tốn mã hóa
đối xứng, thuật tốn xác thực thơng điệp và thuật tốn băm đều được thương


lượng (nguồn: RFC 4253).
4. Giao thức lớp truyền tải SSH (TLP) - Trao đổi gói

Hình 2: Trao đổi gói SSH TLP (nguồn: cisco.com).

2


5. Giao thức gói nhị phân SSH TLP

Hình 3: Hình thành gói SSH TLP (nguồn: cisco.com).

Thực hiện mã hóa và MAC / xác thực mơ hình; các cuộc tấn cơng tồn tại
khi được sử dụng với chế độ CBC (thích chế độ CTR hơn).
Giao thức gói nhị phân SSH TLP
Các thuật tốn mã hóa và xác thực, khóa mã hóa, IV đều được thương
lượng trong q trình trao đổi khóa. Các thuật toán và chế độ (AES, 3DES, CBC,
CTR, v.v.) có thể khác nhau theo từng hướng.
Trước khi mã hóa, gói tin được đệm ngẫu nhiên: gói được mã hóa = (chiều
dài gói || chiều dài đệm || trọng tải || đệm ngẫu nhiên)
MAC (HMAC) được tính trên gói văn bản rõ được mã hóa và một số thứ tự
32bit ngầm định (không được truyền); ngăn chặn các cuộc tấn cơng phát lại. MAC
khơng được mã hóa.
mac = MAC (khóa, số thứ tự || gói được mã hóa)
6. Trao đổi khóa SSH TLP
Phương pháp trao đổi chính chỉ định cách các khóa phiên một lần được tạo để mã
hóa và xác thực cũng như cách xác thực máy chủ được thực hiện (nguồn: RFC
4253).
Đặc điểm kỹ thuật SSH cho phép các phương pháp thay thế của khóa trao đổi,
nhưng nó chỉ định hai phiên bản trao đổi khóa DiffieHellman.


3


Hình 4: Gói SSH TLP Sàn giao dịch (nguồn: cisco.com).

7. Trao đổi khóa SSH TLP Diffie-Hellman (nguồn: RFC 4253)
VS và VC là các chuỗi id của S và C; KS là khóa máy chủ lưu trữ cơng
khai của S; IS và IS là các tin nhắn MSG KEXINIT của S’s và C’s SSH được trao
đổi trước khi phần này bắt đầu; những thông báo này bao gồm một cookie ngẫu
nhiên 128bit để đảm bảo tính mới của phiên.



C chọn x ngẫu nhiên, tính e = gx mod p. C gửi e cho S.
S chọn y ngẫu nhiên, tính f = gy mod p. S nhận e, tính: - K = ey mod p

- H = băm (VC || VS || IC || IS || KS || e || f || K)
- chữ ký trên H với khóa máy chủ riêng của nó
S gửi (KS || f || s) đến C.


C xác minh rằng KS thực sự là khóa máy chủ cho S (ví dụ: sử dụng chứng
chỉ hoặc cơ sở dữ liệu cục bộ hoặc chấp nhận khóa mà khơng cần xác
minh). C tính: - K = fx mod p

- H = băm (VC || VS || IC || IS || KS || e || f || K)
C xác minh chữ ký s trên H.

4



8. Bắt nguồn từ khóa phiên SSH
Kết quả của các bước trao đổi chính:
• C và S bây giờ dùng chung một khóa chính K
• S đã được xác thực với C (S đã ký khóa cơng khai DH ngẫu nhiên của C) • Máy
chủ H giá trị băm làm id phiên cho kết nối này
• Giao tiếp tiếp theo được bảo vệ bằng các khóa phiên dẫn xuất
Các vectơ đơn vị phiên, khóa mã hóa và xác thực:
• IVCS = hash (K || H || “A” || session id)
• IVSC = băm (K || H || “B” || id phiên)
• EKCS = hash (K || H || “C” || session id)
• EKSC = băm (K || H || “D” || id phiên)
• AKCS = băm (K || H || “E” || id phiên)
• AKSS = băm (K || H || “F” || id phiên)
Dữ liệu chính được lấy từ đầu của đầu ra băm.
9. Giao thức xác thực người dùng SSH - Tổng quan
Sau khi trao đổi khóa, khách hàng yêu cầu một dịch vụ bằng gửi YÊU CẦU DỊCH
VỤ MSG SSH gói để yêu cầu Người dùng Xác thực hoặc Giao thức kết nối.

5


Hình 5: Gói SSH TLP Sàn giao dịch (nguồn: cisco.com).

10.

Giao thức xác thực người dùng SSH - Tổng quan

Giao thức xác thực SSH chạy trên Giao thức lớp truyền tải SSH; nó giả

định rằng giao thức cơ bản cung cấp bảo vệ tính tồn vẹn và bí mật. Giao thức có
quyền truy cập vào id phiên (nguồn: RFC 4252).
Hỗ trợ ba phương pháp xác thực người dùng:
• Khóa cơng khai (bắt buộc)
• Mật khẩu (tùy chọn)
• Dựa trên máy chủ (tùy chọn)
Máy chủ kiểm soát những phương pháp xác thực nào có thể được sử dụng.
11.
Giao thức xác thực người dùng SSH - Phương thức xác thực
Khóa cơng khai
Máy khách gửi đến máy chủ một thông báo đã ký bao gồm id phiên, tên
người dùng, khóa cơng khai của người dùng và một số thông tin khác. Chữ ký
được tạo bằng khóa cá nhân của người dùng.

6


Khi nhận được tin nhắn, máy chủ sẽ kiểm tra xem khóa cơng khai được
cung cấp có được chấp nhận để xác thực hay khơng và nếu có, hãy kiểm tra xem
chữ ký có đúng khơng.
Mật khẩu
Về cơ bản, máy khách gửi tên người dùng và mật khẩu rõ ràng; Tuy nhiên,
chúng được bảo vệ bởi Giao thức Bảo mật Truyền tải SSH.
Dựa trên máy chủ
Tương tự với phương thức khóa cơng khai ở trên nhưng với khóa cơng khai
trên mỗi máy chủ lưu trữ (không phải cho mỗi người dùng); xác thực dựa trên máy
chủ mà người dùng đến và tên người dùng trên máy chủ từ xa.
12.
Giao thức kết nối SSH - Tổng quan
Cung cấp:

• các phiên đăng nhập tương tác
• thực hiện từ xa các lệnh
• kết nối TCP / IP được chuyển tiếp
(cổng chuyển tiếp)
• kết nối X11 được chuyển tiếp
Các ứng dụng này được triển khai dưới dạng các kênh được ghép lại thành một
đường hầm mã hóa; đường hầm được cung cấp bởi Giao thức lớp truyền tải SSH.

Hình 6: Kết nối SSH Trao đổi tin nhắn giao thức (nguồn: cisco.com) .

7


13.

Giao thức kết nối SSH - Chuyển tiếp cổng TCP / IP

Chuyển tiếp cổng hoặc SSH đào hầm là một trong những các tính năng hữu
ích của SSH. Sử dụng chuyển tiếp cổng một người có thể chuyển đổi bất kỳ kết
nối TCP khơng an tồn nào vào một kết nối SSH an tồn.

Hình 7: Đường hầm SSH (nguồn: cisco.com).

14.

SSH Port Forwarding - Local Port Forwarding

Các kết nối từ máy khách SSH được chuyển tiếp qua máy chủ SSH đến
máy chủ đích.
ssh -L sourcePort: DEST-HOST: destPort SSH-HOST

Kết nối với SSH với SSH-HOST, chuyển tiếp tất cả các cố gắng kết nối
TCP tới sourcePort (trên máy cục bộ) tới đích trên DEST-HOST, có thể truy cập
được từ SSH-HOST.
Ví dụ:
ssh -L 8080: localhost: 80 fesb.hr
ssh -L 8080: google.com: 80 fesb.hr

8


Hình 8: Chuyển tiếp cổng cục bộ (từ: unix.stackexchange.com).

15.

Chuyển tiếp cổng SSH - Chuyển tiếp cổng từ xa

Các kết nối từ máy chủ SSH được chuyển tiếp qua máy khách SSH, sau đó
đến máy chủ đích.
ssh -R sourcePort: DEST-HOST: destPort SSH-HOST
Kết nối với SSH tới SSH-HOST, chuyển tiếp tất cả các cố gắng kết nối TCP
tới sourcePort (trên SSH-HOST) tới đích trên DEST-HOST, có thể truy cập được
từ máy chủ cục bộ.
Ví dụ:
ssh -R 80: localhost: 80 fesb.hr
ssh -R 80: google.com: 80 fesb.hr

9


16.


Chuyển tiếp cổng SSH - Chuyển tiếp cổng từ xa

Hình 9: Chuyển tiếp cổng từ xa (từ: unix.stackexchange.com).

10


CHƯƠNG 2: MỘT THÔNG TIN VỀ SSH
1. Độ bảo mật của Ssh.
Giao thức SSH cung cấp các dịch vụ của máy chủ như xác thực, mã hóa, xác
minh tính tồn vẹn dữ liệu và xác thực khách hàng. Máy chủ được SSH xác thực
thông qua việc thực hiện DSA, RSA hoặc ECDSA thuật tốn mã khóa cơng khai.
Để xác minh mã hóa và tồn vẹn dữ liệu, một số thuật tốn được cung cấp mà
mỗi sản phẩm SSH có thể thực hiện trong một khoảng thời gian nhất định. Trong
khi đó, xác thực khách hàng lại được SSH thực hiện bằng cách sử dụng mật khẩu,
khóa cơng khai, chỉ 1 tài khoản login trên 1 thời diểm (single sign-on), và các
phương pháp khác.
Đặc điểm kỹ thuật giao thức SSH2 được công khai và đã được xem xét bởi một
số người thực hiện độc lập. Vì vậy, khi thực hiện đúng và sử dụng chúng, giao
thức này hoàn toàn an toàn để bảo mật thông tin và chống lại hầu hết tất cả các
cuộc tấn công mật mã.
2. Những trường hợp cần sử dụng Ssh.
SSH hoạt động ở tầng thứ 4 trong mơ hình TCP/IP. Nó cho phép tương tác giữa
máy chủ và máy khách, sử dụng cơ chế mã hoá nhằm ngăn chặn các hiện tượng
nghe trộm, đánh cắp thông tin trên đường truyền. Đây là điều mà các giao thức
trước đây như telnet, rlogin không đáp ứng được.
TCP/IP là gì?
TCP/IP viết tắt của Transmission Control Protocol (TCP) và Internet
Protocol (IP) là giao thức cài đặt truyền thông, chồng giao thức mà hầu hết các

mạng máy tính ngày nay đều sử dụng để kết nối. TCP/IP được đặt theo tên của 2
giao thức là giao thức điều khiển giao vận và giao thức liên mạng.
Vì vây, bạn nên lựa chọn sử dụng SSH nếu muốn thiết lập một kết nối mạng
được mã hóa và cung cấp mơi trường an tồn cho người tiêu dùng. Các công cụ
SSH phổ biến hiện nay có thể kể đến như PuTTY, OpenSSH…
3. Cơ chế hoạt động của Ssh.
Quy trình hoạt động của SSH có thể tóm gọn thơng qua 3 bước đơn giản sau:
Bước 1: Định danh host – xác định định danh của hệ thống tham gia phiên làm
việc SSH. Đơn giản hơn, đây là bước khởi tạo kết nối SSH. Kết nối này là một
kênh giao tiếp bảo mật giữa server và client.
Bước 2: Mã hoá dữ liệu – thiết lập kênh làm việc mã hoá. Sau khi Client xác
định được định danh của Server 1 kết nối bảo mật đối xứng được hình thành giữa
2 bên.
Bước 3: Chứng thực và giải mã – xác thực người sử dụng có quyền đăng nhập
hệ thống. Kết nối này sẽ được sử dụng để Server xác thực Client.
11


4. Ưu điểm của Ssh.
Lý do khiến nhiều người lựa chọn sử dụng giao thức này xuất phát từ những
ưu điểm vượt trội của SSH so với các giao thức khác. SSH có khả năng mã hóa và
truyền tải dữ liệu an toàn giữa mạng lưới host và client. Host đại diện cho máy chủ
từ xa bạn muốn kết nối tới và client là máy tính của bạn dùng để truy cập tới host.
Lợi thế thứ hai là có nhiều cách khác nhau giúp việc mã hóa qua SSH được
thực hiện hiệu quả và toàn vẹn như:
Symmetrical encryption, Asymmetrical encryption, Hashing.
 Ssh Symmetrical Encryption là

Symmetric encryption là một dạng mã hóa sử dụng secret key (chìa khóa bí
mật) ở cả 2 chiều mã hóa và giải mã tin nhắn bởi cả host và client. Điều này có

nghĩa là bất kỳ ai nắm được khóa đều có thể giải mã tin nhắn trong quá trình
chuyền.
Nguyên tắc hoạt động của Symmetrical Encryption là cả client và server tạo
chung một key bí mật và key đó khơng được tiết lộ cho bên thứ ba. Quá trình tạo
symmetric key được thực hiện bởi key exchange algorithm. Key đó được dùng
như chìa khóa mã hóa cho cả hai đầu kết nối.
Điều khiến cho thuật toán này an tồn là vì key khơng được truyền giữa client
và host. Thay vào đó, cả 2 máy tính chia sẽ thơng tin chung và sau đó sử dụng
chúng để tính ra khóa bí mật. Vì vậy, kể cả có máy khác bắt được thơng tin chung,
nó cũng khơng thể tính ra key bí mật vì khơng biết được thuật tốn tạo key.
 Ssh Asymmetrical encryption là

Khơng giống với symmetrical encryption, asymmetrical encryption sử dụng 2
khóa khác nhau để mã hóa và giải mã. 2 khóa này được gọi là public key và
private key. Cả 2 hình thành nên một cặp khóa là public-private key pair. Trong
đó, khóa public sẽ được công khai cho tất cả các bên liên quan cịn private key
phải ln ln được đảm bảo an tồn.
Asymmetrical Encrytion chỉ được sử dụng trong quá trình trao đổi thuật tốn
của khóa của symmetric encryption. trước khi bắt đầu một phiên giao dịch an toàn.
Sau khi kết nối symmetrict an toàn đã được thiết lập, server sử dụng public key
của client để tạo và challenge và truyền nó tới client để chứng thực. Nếu client có
thể giải mã tin nhắn, có nghĩa là nó đang giữ đúng private key cần thiết cho kết
nối.
 Ssh Hashing là

Hash một chiều khác với cả 2 phương thức mã hóa trên ở chỗ nó khơng được
sinh ra để giải mã. Thay vào đó, nó tạo ra một giá trị duy nhất với độ dài nhất định
cho mỗi lần nhập liệu mà khơng có hướng nào khác để khai thác.

12



Vì vậy, SSH sử dụng hashes để xác nhận tính xác thực của tin nhắn. Nó được
thực hiện bởi HMACs. Việc này đảm bảo lệnh không bị giả mạo bởi bất kỳ
phương thức nào.
5. Giai đoạn thiết lập kết nối của Ssh.

Có thể thấy, phương thức hoạt động của SSH có thể dễ dàng tóm gọn trong 3
bước. Ở phần này, hãy cùng chúng tơi tìm hiểu rõ hơn về các giai đoạn thiết lập
kết nối của SSH.
 Xác định host

Việc định danh host được thực hiện qua việc trao đổi khố. Mỗi máy tính điều
khiển SSH có một khố định danh duy nhất. Chúng bao gồm hai thành phần: khố
riêng tư và khố cơng cộng. Khố cơng cộng được sử dụng khi cần trao đổi giữa
các máy chủ. Trong khi khóa riêng tư thì được dùng để giải mã riêng.
Khi hai hệ thống bắt đầu một phiên làm việc SSH, máy chủ sẽ gửi khố cơng
cộng của nó cho máy khách. Máy khách sinh ra một khoá phiên ngẫu nhiên. Sau
đó nó mã hố khố này bằng khố cơng cộng của máy chủ. Cuối cùng nó được gửi
lại cho máy chủ. Máy chủ sẽ giải mã khoá phiên này bằng khố riêng của mình và
nhận được khố phiên. Q trình này được xem như các bước nhận diện máy chủ
và máy khách.
 Mã hóa dữ liệu

Sau khi hồn tất việc thiết lập phiên làm việc bảo mật (trao đổi khố, định
danh, xác định host), q trình trao đổi dữ liệu diễn ra thơng qua một bước trung
gian đó là mã hoá/giải mã, Ở bước này, dữ liệu gửi/nhận trên đường truyền được
giải mã theo cơ chế đã thoả thuận trước. Các cơ chế mã hoá thường được chọn bao
gồm: 3DES, IDEA, và Blowfish.
13



 Chứng thực người dùng

Chứng thực người dùng là bước cuối cùng trong ba bước. Đây cũng đồng
thời là bước đa dạng nhất vì có thể sử dụng nhiều cách khác nhau để chứng thực
người dùng. Thông thường, người ta thường sử dụng các cách như chứng thực
rhosts, chứng thực RSA, sử dụng ssh-keygen và ssh-agent…

14


CHƯƠNG 3: KẾT NỐI GIAO THỨC SSH.
1 Cách dùng Ssh kết nối với server Linux
 Thiết lập server Linux chấp nhận các kết nối

Muốn dùng SSH kết nối server Linux, bạn cần thiết lập trên server trước.
Tùy thuộc vào phần cứng và bản phân phối Linux việc thiết lập có thể thay đổi.
Hướng dẫn sau đây chạy Ubuntu 16.04 LTS.
Bạn sẽ cần phải cài đặt công cụ đăng nhập từ xa cho giao thức SSH. Một
trong những công cụ phổ biến nhất là OpenSSH. Bạn có thể tìm bản download tại
đây: Cách download OpenSSH, mở một
terminal mới (Ctrl + Alt + T) và nhập lệnh sau:
sudo apt-get update
Điều này thực hiện cập nhật và đảm bảo bạn có các kho lưu trữ mới nhất.
Trước khi tiến hành cài đặt OpenSSH, hãy kiểm tra mọi nâng cấp. Trong terminal,
hãy chạy lệnh:
sudo apt-get upgrade
Khi bạn đã cập nhật và nâng cấp, hãy mở một dòng lệnh mới và nhập:
sudo apt-get install openssh-server

 Định cấu hình cài đặt SSH cho server

Sau khi OpenSSH đã được cài đặt ở phía server, bạn có thể chỉnh sửa thơng
tin cấu hình cơ bản. Mở một terminal mới và nhập chuỗi sau đây để mở file cấu
hình SSH:
sudo nano /etc/ssh/sshd_config
Mặc định, SSH server của bạn sẽ hoạt động trên cổng 22. Bạn có thể tự
thay đổi từ cổng 22 sang cổng bạn chọn. Ngoài ra, bạn có thể tăng cường bảo mật
bằng cách nhập số đăng nhập tối đa. Trong Port, tìm dịng MaxAuthTries. Bạn có
thể nhập bất kỳ số nào ở đây. Vì vậy, để chọn số lần đăng nhập tối đa là 4, hãy
nhập:
MaxAuthTries 4
Sau khi cài đặt OpenSSH, SSH server sẽ chạy. Nhưng để kiểm tra, chỉ cần
mở một terminal và chạy:
sudo service ssh status
Điều này sẽ trả về một thông báo rằng SSH đã được kích hoạt. Để khởi
động SSH, hãy mở một dòng lệnh và nhập:
sudo service ssh start
Và để ngăn SSH chạy, hãy nhập: sudo service ssh stop
15


2 Kết nối Ssh từ Window
Do Window khơng tích hợp SSH Command nên người dùng phải tải về các
mã nguồn mở hay ứng dụng đóng vai trị là “bên thứ ba”. Bạn có thể sử dụng
PuTTy và ZOC7 để kết nối trên Window.
 SSH PuTTy là gì?

PuTTy là một phần mềm dùng để điều khiển server thông qua mạng Internet.
Để kết nối thành công với PuTTy, bạn thực hiện theo các bước sau






Bước 1: Tải về PuTTy
Bước 2: Khởi động chương trình PuTTy vừa cài đặt
Bước 3: Nhập thơng tin server cần điều khiển
Bước 4: Nhập thông tin username và password

Trong quá trình kết nối, bạn cần lưu ý độ tương thích giữa các thơng số. Đặc
biệt lưu ý số cổng trong khung Port và số cổng SSH Server yêu cầu. Ngoài ra,
người dùng sẽ nhận được các cảnh báo bảo mật. Nếu đây là lần đầu tiên sử dụng,
bạn có thể click vào YES và tiếp tục. Nếu bạn đã từng truy cập, hãy cẩn thận vì
đây có thể là một SSH Server độc hại.

Bên cạnh kết nối và cấu hình SSH Server, với PuTTY, người dùng cịn có
thể sử dụng file Private Key để sử dụng các ứng dụng khác cần kết nối với SSH.
Khi khởi động PuTTY, bạn sẽ tìm thấy tùy chọn này tại cửa sổ PuTTY
Configuration. Sau đó, tiếp tục truy cập theo đường dẫn Connection => SSH =>
16


Auth. Khi cửa sổ hiện lên, click Browse, chọn file Private Key: C:
MySSHid_rsa.ppk và click Open để bắt đầu.
 SSH ZOC7 Terminal là gì?

Tương tự PuTTY, ZOC7 cũng là một công cụ sử dụng giao thức SSH.
ZOC7 được dùng để cài đặt và chỉnh sửa server. Muốn kết nối, bạn cần thực hiện
theo các bước sau:








Bước 1: Tải về và cài đặt ZOC7 Terminal
Bước 2: Điền thông tin server và port vào cửa sổ Log in
Bước 3: Chọn Secure Shell trong ô Connection Type
Bước 4: Chọn Linux trong ô Emulation
Bước 5: Nhập Username và Password
Bước 6: Nhấn Connect để kết nối với server

3 Kết nối Ssh từ Linux/MacOS.
SSH command thường được tích hợp trên các hệ điều hành dựa trên UNIX
như Linux và MacOS. Để kết nối SSH Server từ một trong hai hệ điều hành trên,
bạn thực hiện theo các bước sau:




Bước 1: Mở cửa sổ Terminal

o

Hệ điều hành MacOS: Finder =>Applications =>Utilities =>Terminal.

o


Hệ điều hành Linux: tìm shortcut Terminal trong menu ứng dụng.
Bước 2: Nhập lệnh ssh vào cửa sổ Terminal theo cú
pháp mới – thay thế username bằng tên người dùng và ssh.server bằng tên máy
chủ hoặc IP SSH Server.

Bước 3: Xác nhận và nhập thơng tin mật khẩu

 Thêm Public Key vào Server

Public Key là file text chứa dữ liệu mã hóa có thể cài đặt cho bất kỳ server
nào. Trên nền tảng Linux, bạn có thể bổ sung Public Key theo các bước sau:
Bước1: Lưu thông tin Public Key để xác thực đăng nhập sử dụng key tại
~/.ssh/authorized_keys

Bước2: Copy nội dung Public Key, chèn vào cuối file và lưu lại
Bước3: Bật chế độ đăng nhập và kích hoạt các tham số PubkeyAuthentication yes
và AuthorizedKeysFile .ssh/authorized_keys trong SSH Config

Bước4: Khởi động lại SSH Service




17


CHƯƠNG 4: NHỮNG LỖ HỔNG TRONG GIAO THỨC SSH.
1. Tấn công dos hệ thống
Tấn công từ chối dịch vụ hay còn được biết đến là DoS, là một trong những
thủ đoạn của kẻ tấn công nhằm ngăn chặn người dùng sử dụng và truy cập vào 1

dịch vụ nào đó. DoS có thể làm 1 máy tính nào đó ngưng hoạt động, từ mạng nội
bộ đến 1 hệ thống mạng lớn.

1.1Nguyên nhân
OpenSSH phiên bản trước 7.3 không giới hạn độ dài mật khẩu để xác thực.

1.2Phương thức thực hiện
Kẻ tấn công gửi dữ liệu thủ công khoản 90000 ký tự đến trường ‘mật khẩu’
và cố gắng để đăng nhập vào một máy tính từ xa thơng qua SSH với tên người
dùng như ‘root’.
Nếu q trình tấn cơng chạy một vịng lập vơ hạn thì khiến tiêu thu tài
ngun CPU (100% CPU) từ đó dẫn đến hệ thống bị ảnh hưởng bị treo hồn tồn.

1.3Hậu quả
DoS có thể làm máy tính ngưng hoạt động, từ mạng nội bộ đến 1 hệ thống
mạng lớn. Những kẻ tấn công sẽ chiếm lượng lớn tài nguyên mạng như là bộ nhớ
và băng thông, thậm chí chúng cịn làm mất khả năng xử lý các yêu cầu dịch vụ từ
những khách hàng khác. Đặc biệt là những hệ thống giao dịch điện tử thì thiệt hại
của việc này sẽ ảnh hưởng rất lớn.

2. Tấn công xen giữa (Man-in-the-middle)
Một cuộc tấn công Man-in-the-middle hay được gọi tắt là MitM thường là
một cuộc tấn công linh hoạt, xâm chiếm và bí mật. Tấn cơng Man-in-the-middle
xảy ra khi ai đó ở giữa hai máy tính (máy tính xách tay và máy chủ từ xa) và có
khả năng chặn lưu lượng truy cập. Kẻ đó có thể nghe trộm hoặc thậm chí chặn liên
lạc giữa hai máy và đánh cắp thông tin nhạy cảm. Các cuộc tấn công man-in-themiddle là một vấn đề bảo mật nghiêm trọng.

2.1 Nguyên nhân
Các lỗi nghiêm trọng thực tế là kết quả của một đoạn mã để thiết lập thử
nghiệm một tính năng chuyển vùng "roaming" trong OpenSSH từ phiên bản 5.4

đến 7.1 để cho phép người dùng tiếp tục kết nối.

18


2.2 Cách thức
Một cuộc tấn công xen giữa (MITM), là một cuộc tấn cơng mà kẻ tấn cơng
bí mật chuyển tiếp và có thể làm thay đổi giao tiếp giữa hai bên mà họ tin rằng họ
đang trực tiếp giao tiếp với nhau.
Một ví dụ về các cuộc tấn cơng man-in-the-middle là nghe trộm, trong đó
kẻ tấn cơng kết nối độc lập với các nạn nhân và chuyển tiếp thông tin giữa họ để
họ tin rằng họ đang nói chuyện trực tiếp với nhau qua kết nối riêng tư, trong khi
thực ra tồn bộ cuộc trị chuyện được kiểm sốt bởi kẻ tấn cơng. Người tấn cơng
phải có khả năng đánh chặn tất cả các thông tin liên quan đi lại giữa hai nạn nhân
và tiêm những thông tin mới. Điều này đơn giản trong nhiều trường hợp; ví dụ,
một kẻ tấn công trong phạm vi tiếp nhận của một điểm truy cập khơng dây (Wi-Fi)
khơng được mã hóa có thể chèn mình như một "người đàn ơng ở giữa" (man-inthe-middle).
Một hình thức khác của MITM là tấn cơng man-in-the-browser (MITB), bắt
đầu khi phần mềm độc hại được đặt vào hệ thống và hoạt động cùng với trình
duyệt. MITB thường được sử dụng để gian lận tài chính, ví dụ: bằng cách chặn
giao tiếp với ngân hàng.
Các cuộc tấn công MITB cực kỳ nguy hiểm vì chúng rất khó bị phát hiện.
Chúng bỏ qua các biện pháp kiểm soát bảo mật và mã hóa phổ biến trên các trang
ngân hàng và có thể ẩn mình với các chương trình chống virus.
Một loại MITM khác áp dụng cho các thiết bị di động là man-in-the-mobile
(MITM) hoặc còn được gọi là man-in-the-phone. MITM là một phần mềm độc hại
có nhiệm vụ chính là vượt qua nhận dạng hai bước qua SMS. Nó thực hiện điều
này bằng cách giám sát các tin nhắn với mã xác minh. Phần mềm độc hại tập trung
vào thiết bị Android có thể có quyền truy cập vào các tin nhắn được mã hóa trên
WhatsApp.

Trong mơi trường di động, có một kiểu tấn cơng khác được gọi là man-inthe-app, trong đó kẻ tấn cơng sử dụng chứng chỉ (do chính họ ký) để giao tiếp với
ứng dụng bị tấn công.
Giả sử Alice muốn liên lạc với Bob. Trong khi đó, Mallory muốn chặn cuộc
đối thoại để nghe trộm và có thể gửi tin sai cho Bob.
Đầu tiên, Alice hỏi Bob về chìa khóa cơng khai của mình. Nếu Bob gửi
chìa khố cơng cộng của mình đến Alice, nhưng Mallory có thể chặn nó, một cuộc
tấn cơng xen giữa có thể bắt đầu. Mallory gửi một thơng điệp giả mạo đến Alice
mạo nhận rằng nó đến từ Bob, nhưng thiệt ra đó là khóa cơng khai của Mallory.
Alice, tin rằng khóa cơng khai này là của Bob, mã hóa tin nhắn của cơ bằng
chìa khố của Mallory và gửi tin nhắn được mã hóa về Bob. Mallory một lần nữa
chặn lại, giải mã tin nhắn sử dụng khóa riêng của mình, có thể thay đổi nó nếu cơ
ấy muốn và mã hóa lại nó bằng khóa cơng khai mà Bob gửi cho Alice. Khi Bob
nhận được thông tin mới mã hóa, anh tin rằng nó đến từ Alice.
19


1.

Alice gởi một thông tin tới Bob, mà bị chặn bởi Mallory:

Alice "Hi Bob, đây là Alice. Đưa chìa khóa của anh cho tôi." →

Mallory

Bob

2.
Mallory chuyển thông tin này tới Bob; Bob khơng có cách nào để chứng
thực nó là từ Alice:
Alice

3.
Alice

Mallory "Hi Bob, đây là Alice. Đưa chìa khóa của anh cho tơi." →

Bob

Bob trả lời với chìa khóa mật mã của anh ta:
Mallory

← [Bob's key] Bob

4.
Mallory thay thế key của Bob với cái của mình, và chuyển nó tới Alice, cho
đó là Bob's key:
Alice

← [Mallory's key] Mallory

Bob

5.
Alice mã hóa một thơng tin bằng cái mà chị ta tin là Bob's key, nghĩa là chỉ
Bob có thể đọc được nó:
Alice "Đến gặp mình tại trạm xe bt!" [mã hóa với Mallory's key] →
Bob

Mallory

6.

Tuy nhiên, vì nó được mã hóa với Mallory's key, Mallory có thể giải mã nó,
đọc nó, thay đổi nó (nếu muốn), tái mã hóa với Bob's key, và chuyển nó tới Bob:
Alice
Mallory "Đến gặp tơi tại xe tải nhỏ ở bờ sơng!" [mã hóa với Bob's key]
→ Bob
7.

Bob nghĩ thông điệp này là một giao tiếp được bảo mật của Alice.

8.

Bob đi tới xe tải nhỏ ở bờ sông và bị cướp bởi Mallory.

9.

Alice không biết rằng Bob bị cướp bởi Mallory, cứ nghĩ là Bob chậm trễ.

10.
Đợi lâu không thấy Bob tới, chị ta mới nghĩa ra là có thể có điều gì xảy ra
cho Bob.

2.3 Hậu quả
Tính năng mới này có thể bị khai thác bởi hacker, chúng có thể sử dụng
một máy chủ OpenSSH chứa mã độc để đánh lừa một client dễ bị ảnh hưởng để
đưa lên các SSH key khi họ cố gắng đăng nhập.

Tội phạm mạng với một máy chủ bị xâm nhập có thể bí mật lấy SSH
private key yêu cầu đăng nhập vào một hệ thống khác từ máy tính cá nhân của
người dùng, cho phép chúng nhảy từ máy chủ này đến máy chủ kia.
20



3. Tấn công lỗ hỏng LibSSH
Lỗ hổng này cho phép bất kỳ ai có thể vượt lớp xác thực hồn tồn và
chiếm quyền quản trị máy chủ bị tấn cơng mà không cần mật khẩu. Chiếm máy
chủ nhờ lỗ hổng LibSSH (có tên CVE-2018-10933) thực chất là một lỗi vượt bảo
mật xuất hiện trong LibSSH 0.6 ra mắt năm 2014.

3.1Nguyên nhân
Nguyên nhân gây ra lỗ hỏng này là do lỗi coding của lập trình viên trong LibSSH.

3.2Phương thức tấn cơng
Theo tài liệu tư vấn cho biết, kẻ tấn công chỉ cần gửi tin nhắn
“SSH2_MSG_USERAUTH_SUCCESS” tới máy chủ có kết nối SSH khi máy chủ
đang đợi tin nhắn “SSH2_MSG_USERAUTH_REQUEST”. Do lỗi logic trong
LibSSH, thư viện không thể kiểm tra xem tin nhắn “đăng nhập thành cơng” nói
trên là của máy chủ hay của khách hàng và cũng không thể kiểm tra q trình xác
thực đã hồn thành hay chưa. Do đó, nếu một kẻ tấn công từ xa (là khách hàng)
gửi tin “SSH2_MSG_USERAUTH_SUCCESS” phản hồi cho LibSSH, LibSSH
xem như việc xác thực đã thành công và sẽ cho kẻ tấn công chiếm máy chủ nhờ lỗ
hổng LibSSH mà không cần nhập mật khẩu.

3.3 Hậu quả
Lỗ hỏng này khiến máy chủ của hàng nghìn doanh nghiệp có thể bị tin tặc
tấn cơng trong 4 năm liên tiếp kể từ 2014. Kẻ tấn cơng có thể nhờ vào lỗ hỏng này
mà chiếm quyền sử dụng máy chủ và gây ra tổn thất hàng tỉ đồng cho các doanh
nghiệp.
Nhưng rất may là đội ngũ tại LibSSH đã xử lý vấn đề này bằng phiên bản
LibSSH mới cập nhật 0.8.4 và 0.7.6 vào hôm thứ 3, chi tiết về lỗ hổng cũng được
công bố vào cùng ngày.


21


CHƯƠNG 5: CÁC CÁCH TRỊNG TRÁNH CÁC CUỘC TẤN CƠNG
SSH.
1. Chỉ sử dụng giao thức SSH phiên bản 2
Giao thức SSH phiên bản 1 (SSH-1) cho tới bây giờ đã khơng cịn an tồn
do tồn tại những lổ hổng bảo mật như bị tấn cơng “man-in-the-middle”.
Vì vậy hãy chỉ sử dụng giao thức SSH phiên bản 2. Hiện tại mặc định dịch vụ
SSH đã kích hoạt phiên bản “2”, nhưng trên 1 số OS cũ thì vẫn cịn hỗ trợ cả 1 và
2.
Protocol 2

2. Không sử dụng mật khẩu rỗng
Bạn cần cấu hình khơng cho phép các đăng nhập SSH vào hệ thống được
sử dụng mật khẩu rổng, điều này là cực kì nguy hiểm.
PermitEmptyPasswords no

3. Thay đổi cổng SSH mặc định (port 22)
Dịch vụ SSH mặc định chạy cổng 22 do đây là quy định tiêu chuẩn chung
của thế giới. Vì là port phổ biến, nên rất dễ bị kẻ xấu thực hiện các hoạt động dị
tìm mật khẩu tự động đăng nhập SSH vào hệ thống của bạn. Vì vậy bạn có thể
thay đổi port kết nối SSH đến VPS/Cloud Server của bạn.
Port 8022
Nếu hệ thống Linux của bạn có nhiều hơn 1 địa chỉ IP thì tốt nhất nên chỉ
định rõ địa chỉ IP nào sẽ lắng nghe port dịch vụ SSH kết nối tới. Điều này sẽ tốt
hơn việc bạn để dịch vụ SSH mở trên toàn bộ địa chỉ IP đang hoạt động của hệ
thống.
ListenAddress 192.168.1.123


4. Không cho đăng nhập bằng user root
Chúng ta sẽ không cho phép đăng nhập bằng user root của hệ thống. Nhiều
bạn nghĩ vậy làm sao để sử dụng user root trên Linux qua SSH?
Đơn giản bạn chỉ cần tạo 1 user khác và cấu hình hoạt động “su” hoặc
“sudo” để chuyển đổi từ user thường sang user root để sử dụng. Điều này sẽ giúp
bảo mật hệ thống SSH Server hơn. Để cấu hình khơng cho user root đăng nhập
SSH:
PermitRootLogin no

5. Tắt chức năng đăng nhập của file ~/.rhosts
Đây là tính năng hỗ trợ đăng nhập “rlogin” qua port 22, hình thức đăng
nhập này đã cũ và tồn tại nhiều rủi ro bảo mật. Nếu thông tin host và user được
chỉ định cấu hình theo format cụ thể trong file ~/.rhosts thì các user trong file này
22


sẽ được phép đăng nhập vào hệ thống Linux mà không cần phải cung cấp thông
tin mật khẩu. Vậy nên hãy tắt chức năng hỗ trợ đăng nhập qua RSH.
IgnoreRhosts yes
RhostsRSAAuthentication no

6. Cấu hình thời gian ngắt kết nối SSH nếu user khơng hoạt động
Bạn có thể quy định thời gian timeout mà một kết nối SSH đến server
Linux không nhận được bất kì hoạt động tương tác nào trên terminal SSH. Lúc
này nếu quá thời gian quy định thì SSH Server sẽ tự ngắt kết nối SSH từ các user
không tương tác SSH.
ClientAliveInterval 300
ClientAliveCountMax 0
7. Sử dụng mật khẩu phức tạp và độ khó cao

Nếu bạn vẫn cịn xài phương thức đăng nhập SSH vào Linux bằng mật
khẩu, thì xin hãy tạo 1 chuỗi mật khẩu mạnh và dài trên 8 kí tự nhằm mục đích an
tồn. Tránh các mật khẩu dễ tìm, dễ nhớ vì sẽ có khả năng nằm trong danh sách
các cơ sở dữ liệu từ điển mật khẩu khi bị kẻ xấu tự động thử (brute force) mật
khẩu. Tiêu chí của mật khẩu an tồn tối thiểu gồm:
– Độ dài kí tự trên 8 kí tự.
– Có ký tự Hoa, ký tự số, ký tự đặt biệt, và cách đặt password càng ngẫu nhiên
càng tốt.
Ví dụ: “shbcC3yuq57S”

8. Cấu hình thời gian timeout khi user khơng đăng nhập thành công
Khi mà 1 user đăng nhập SSH, nếu khơng chỉ định thơng tin user từ đầu thì
chúng ta sẽ gặp 1 lời nhắc hiện ra yêu cầu nhập thơng tin user. Sau đó là phần
nhập mật khẩu nếu user đó xài phương thức đăng nhập mật khẩu. Thì ở phần này,
chúng ta sẽ quy định thời gian mà 1 kết nối SSH đợi cho hoạt động đăng nhập
user thành cơng (ví dụ 120 giây), nếu khơng thành cơng thì ngắt kết nối SSH tới
server.
LoginGraceTime 120

9. Tắt nhật ký đăng nhập lần gần cuối
Nhật ký đăng nhập SSH lần gần cuối xuất hiện khi bạn đã đăng nhập SSH
thành công vào hệ thống Linux.
Vậy nếu bạn muốn tắt dịng nhật ký đó, thì chỉ cần thay đổi nội dung cấu
hình ở mục “PrintLastLog”
PrintLastLog no

23


10. Sử dụng chứng thực SSH Key, tắt chứng thực mật khẩu

Phần cấu hình này rất là được khuyến cáo sử dụng trong việc kết nối bảo
mật SSH đến hệ thống Linux VPS/Cloud Server. Mặc định mỗi VPS/Cloud
Server bạn sẽ đăng nhập vào bằng username root hoặc user thường và mật khẩu
root mà nhà cung cấp đã gửi cho bạn lúc thuê VPS, tuy nhiên việc sử dụng mật
khẩu luôn có 2 nguy cơ lớn là:


Bạn sẽ mất hồn tồn hệ thống VPS/Cloud Server nếu để lộ mật khẩu.


Các kẻ xấu có thể sử dụng phương thức tấn cơng Brute Force để dị tìm mật
khẩu.
Do đó, khuyến khích các bạn làm quen với SSH Key để đăng nhập vào
VPS/Cloud Server, cũng như sử dụng nó để xác thực các kết nối từ bên ngoài vào
cho an toàn hơn. Vậy hãy tắt cấu hình chứng thực mật khẩu và đảm bảo bật
chứng thực SSH Key.
PubkeyAuthentication yes
PasswordAuthentication no

11. Cho phép/từ chối kết nối SSH từ 1 user hoặc 1 group
Mặc định SSH Server cho phép tất cả các user có tồn tại trên hệ thống
Linux đăng nhập SSH vào server. Nhưng đôi khi chúng ta cũng có nhu cầu chặn
khơng cho đăng nhập SSH đối với 1 số user nhất định hoặc 1 nhóm user cụ thể
trên Linux. Vậy để làm được điều này ta chỉ cần sử dụng 1 số cú pháp như phía
dưới để cấu hình thêm mới vào file “/etc/ssh/sshd_config”
+ Cho phép user hoặc group user được phép đăng nhập SSH
AllowUsers user1 user2
AllowGroups group1
+ Không cho phép user hoặc group user được phép đăng nhập SSH
DenyUsers user3 user4

DenyGroups guest
12. Chế độ “StrictModes” chế độ nghiêm ngặt
Với chế độ cấu hình “StrictModes” chế độ nghiêm ngặt thì ta sẽ chỉ định
dịch vụ SSH phải kiểm tra thông tin quyền (permission) của thư mục $HOME
user, thư mục “.ssh” và file “authorized_keys” chứa key SSH nếu bạn sử dụng
SSH Key. Nếu bạn khơng xử dụng chế độ này (option “no”) thì dịch vụ SSH sẽ
khơng kiểm tra các cấu hình quyền khi bạn đăng nhập vào VPS/Cloud Server. Vì
vậy bạn cần chú ý cấu hình đúng các phân quyền (permission) cho thư mục/key
dùng để đăng nhập SSH.
StrictModes yes
24


13. Số lần tối đa đăng nhập sai
Như chúng ta thường biết hoạt động dị tìm mật khẩu hay cịn gọi tấn công
Brute Force vào 1 dịch vụ SSH khá là nguy hiểm nếu mật khẩu bạn quá đơn giản.
Vậy thì ta nên giới hạn số lần mà 1 user có thể được nhập mật khẩu sai khi cố
đăng nhập SSH vào hệ thống Linux. Hãy cấu hình phần dưới với giá trị bạn mong
muốn. Nếu quá số lần quy định thì SSH Server sẽ ngắt kết nối của user.
MaxAuthTries 3

14. Google Authenticator
Phương thức này sử dụng bảo mật 2 lớp, thông qua mật khẩu và mã code từ
app xác thực của google. Về nguyên lý hoạt động như sau: SSH trên server sẽ cài
thêm service “google-authenticator” để đồng bộ với app trên smart phone. Mỗi
phút sẽ có một mã code được tạo ra trên smart phone. Người dùng đăng nhập
SSH thơng qua mật khẩu sau đó nhập mã xác thực trên smart phone thì mới có
thể đăng nhập.
Cách này có khả năng an tồn hơn vì dễ quản lý và phân quyền cho người dùng.


15. Bảo mật bằng firewall CSF
CSF là một firewall mềm cài trên server Linux với file cấu hình đơn giản,
dễ sử dụng. Khơng chỉ có chức năng quản lý các cổng vào, ra trên server mà nó
cịn có cơ chế chống lại việc tấn cơng như DDOS, DOS… Tự động chặn các IP
có khả năng nguy hiểm với việc đăng nhập sai, dò mật khẩu trong khoảng thời
gian cho phép. Giới hạn IP được truy cập vào cổng SSH.
CSF có thể được tích hợp vào các hệ thống quản lý hosting như CPanel,
DirectAdmin, CWP…

16. Fail2ban
Fail2ban là một app thường được sử dụng chung với Iptables. Có chức năng tự
động chặn các IP đang tấn cơng vào server. Có khả năng tích hợp vào hệ thống
tổng đài như Asterisk, Freeswitch... Bảo vệ server khỏi các cuộc tấn công SIP,
hoặc là DOS, DDOS…

25


×