Làm cách nào tôi có thể bảo vệ chống sự xâm nhập và phần mềm độc hại trước khi kết nối nó với internet (đặc biệt là trên địa chỉ IP công cộng)?


60

Với số lượng lớn Raspberry Pis trong tự nhiên và thực tế là các nhóm lớn trong số chúng được cấu hình giống hệt nhau (khi thẻ SD mới được flash được cài đặt với một trong số ít hình ảnh có sẵn), chúng có thể là mục tiêu hấp dẫn cho phần mềm độc hại, bao gồm cả botnet.

Có thể làm gì để giảm thiểu điều này?

Một điều khá nổi tiếng là người ta nên thay đổi mật khẩu cho người dùng "pi" (Debian) và "root" (Arch.) Nhưng làm thế nào về các tài khoản hệ thống khác (ví dụ: "tli", "pnd"?) mật khẩu phổ quát có lẽ giống nhau cho tất cả các đơn vị?

Và có bất kỳ lỗ hổng đã biết nào trong các gói khác được cài đặt trong hình ảnh SD có sẵn cho Pi không (ví dụ: do giới hạn phần cứng hoặc phiên bản cắt giảm của các gói đó?)

Đặc biệt tôi lo lắng ssh, mysql và bất kỳ dịch vụ nào khác có thể đang chạy trên một hình ảnh mới được cài đặt.

Câu trả lời:


23

Những điều tôi đã nhận thấy cho đến nay về hình ảnh Debian Squeeze:

  • / etc / bóng chứa một loạt các băm mật khẩu cho các tài khoản không phải là tài khoản pi (buildbot, v.v.). Thay đổi mật khẩu trên tài khoản pi, một cách tự nhiên, nếu bạn chưa (hoặc tự tạo tài khoản người dùng mới và xóa tài khoản pi) mà còn chỉnh sửa các mục khác và thay thế băm bằng * s. Lưu ý / etc / passwd chứa các mục trùng lặp cho tài khoản pi, điều này làm cho người dùng / người sử dụng nhầm lẫn, chỉ cần xóa một mục.

  • cấu hình ssh daemon mặc định cho phép đăng nhập root từ xa. Điều này nên được vô hiệu hóa.

  • đáng sử dụng netstat để kiểm tra tập hợp những thứ nghe kết nối; một số lượng đáng kinh ngạc đang chạy so với một mạng Debian tối thiểu điển hình. Nói chung, nên giảm tiếp xúc với những thứ bạn cần , vì vậy trước tiên hãy vô hiệu hóa hoặc tắt tường lửa mọi thứ , sau đó chỉ hiển thị các dịch vụ mà bạn cố tình muốn hiển thị trên internet công cộng (thường là ssh hoặc ssh + http).

  • bạn sẽ muốn thay đổi các phím máy chủ ssh thay vì sử dụng các phím trong ảnh (AIUI hình ảnh mới nhất thực sự tái tạo chúng trong lần khởi động đầu tiên)


1
Tôi không thấy vấn đề với tuyên bố đầu tiên của bạn. Những người dùng bổ sung đó để làm gì? Không phải họ nên bị vô hiệu hóa để đăng nhập? Bạn có thể kiểm tra bằng cách cố gắng suvới họ.
Jivings

2
Tôi sẽ đưa ra -1 này. Chủ yếu là vì bạn đề nghị chỉnh sửa thủ công tệp bóng. Đó là một ý tưởng cực kỳ tồi tệ.
Jivings

@Jivings Không anh ấy không. Anh ta cũng có thể ngụ ý sử dụng vipw; đó có phải là ý tưởng tồi tệ không? Không, không phải vậy. +1 để ngụ ý sử dụng vipw.
dùng2497

41

Có nhiều cách để giải quyết các lỗ hổng, tuy nhiên điều đầu tiên bạn nên biết là Linux không dễ bị xâm nhập như các Hệ điều hành khác. Điều này chủ yếu là do thiếu phần mềm độc hại nhắm mục tiêu * NIX. Tuy nhiên, bạn muốn nhận thức được các cách mà hệ thống của bạn có thể được truy cập.

Mật khẩu

Trước tiên, bạn nên thay đổi mật khẩu mặc định cho bất kỳ người dùng nào có thể đăng nhập. Đối với Debian đây chỉ là người dùng mặc định Pi . Đối với Arch Linux, đây là siêu người dùng root . Mật khẩu được thay đổi khi đăng nhập với tư cách người dùng bằng cách nhập passwdvào dòng lệnh.

Chính sách mật khẩu an toàn được khuyến khích, vì sẽ khá đơn giản để chạy các cuộc tấn công từ điển vũ phu đối với người dùng mặc định của bạn. Chọn một mật khẩu phong nha, trung bình.

Tối nghĩa

Truy cập từ xa có lẽ là lỗ hổng bảo mật quan trọng nhất. Những gì chúng ta có thể sử dụng ở đây được đặt tên là bảo mật bằng cách tối nghĩa . Một phương pháp tấn công phổ biến là quét một loạt địa chỉ IP cho các cổng mở. Vì vậy, một trong những biện pháp đối phó đơn giản nhất chúng ta có thể thực hiện là trở thành người dùng không sử dụng các cổng mặc định .

Tất cả những gì cần làm ở đây là thay đổi các cổng mặc định cho các giao thức thường được sử dụng. Ví dụ: cổng SSH mặc định là 22 và FTP là 21. Trên hệ thống của tôi, SSH sử dụng 222 và FTP 221, điều này sẽ che khuất các giao thức này khỏi mọi cuộc tấn công tự động.

Bảo mật kết nối

Thứ nhất, mối quan tâm bảo mật quan trọng nhất là tài khoản root sẽ không thể đăng nhập thông qua SSH. Bạn có thể vô hiệu hóa đăng nhập root trong /etc/ssh/sshd_configtệp bằng cách bình luận hoặc xóa dòng này:

PermitRootLogin yes

Nó nên được đặt thành không theo mặc định, nhưng tốt nhất là đảm bảo.


Nếu bạn sử dụng SSH rất nhiều và lo lắng về người đàn ông trong các cuộc tấn công ở giữa, từ điển tấn công vào mật khẩu của bạn, thì bạn có thể sử dụng SSH Keys.

Xác thực dựa trên khóa có một số lợi thế so với xác thực mật khẩu, ví dụ: các giá trị khóa khó khăn hơn đáng kể so với mật khẩu đơn giản.

Để thiết lập xác thực khóa SSH, trước tiên bạn cần tạo cặp khóa. Điều này được thực hiện dễ dàng nhất trên máy khách của bạn (máy mà bạn muốn truy cập Pi).

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.

Như bạn có thể thấy, điều này đã tạo ra hai tệp, khóa riêng id_rsavà khóa chung id_rsa.pub.

Khóa riêng chỉ được biết đến với bạn và cần được bảo vệ an toàn . Ngược lại, khóa chung có thể được chia sẻ tự do với bất kỳ máy chủ SSH nào mà bạn muốn kết nối.

Vì vậy, những gì chúng tôi muốn làm là sao chép khóa công khai vào Raspberry Pi. Chúng ta có thể làm điều này rất dễ dàng:

ssh-copy-id pi@address

Trong trường hợp pilà tên người dùng Raspberry Pi, và addresslà địa chỉ IP của Pi.

Tôi sẽ nhắc lại, chúng tôi phân phối khóa công khai . Khóa riêng là của bạn. Giữ chặt nó, để giải phóng khóa đó phá vỡ tính bảo mật của hệ thống.

Các Arch wiki có một mô tả tuyệt vời về cách làm việc này:

Khi máy chủ SSH có khóa công khai của bạn trong tệp và thấy bạn yêu cầu kết nối, nó sẽ sử dụng khóa chung của bạn để tạo và gửi cho bạn một thử thách. Thử thách này giống như một tin nhắn được mã hóa và nó phải được đáp ứng với phản hồi thích hợp trước khi máy chủ cấp quyền truy cập cho bạn. Điều làm cho thông điệp được mã hóa này đặc biệt an toàn là nó chỉ có thể được hiểu bởi một người có khóa riêng. Mặc dù khóa chung có thể được sử dụng để mã hóa tin nhắn, nhưng nó không thể được sử dụng để giải mã chính thông điệp đó. Chỉ có bạn, người nắm giữ khóa riêng, mới có thể hiểu chính xác thách thức và đưa ra phản hồi chính xác.

Để biết thêm thông tin về bảo mật của xác thực khóa công khai, Wikipedia có một lời giải thích kỹ lưỡng .

Với bảo mật SSH, bạn có thể thực hiện một số lượng lớn dữ liệu được mã hóa, bảo mật. Thực tế mọi kết nối cổng khác có thể được định tuyến thông qua SSH nếu cần. Bạn thậm chí có thể chuyển tiếp phiên X thông qua SSH để nó xuất hiện trên máy khác.

Một ví dụ thú vị, hôm qua tôi đã chạy Eclipse trên Máy tính để bàn của mình, xem nó trên Raspberry Pi và điều khiển chuột và bàn phím từ Netbook của tôi. Đó là sức mạnh của SSH.

Quyền

Quyền truy cập tệp là mấu chốt của hệ thống bảo mật Linux. Chúng ảnh hưởng đến những người có thể xem các tệp và thư mục của bạn và có thể rất quan trọng trong việc bảo vệ dữ liệu của bạn. Ví dụ: đăng nhập vào Raspberry Pi như một người dùng bình thường và chạy:

cat /etc/shadow

Các shadowtập tin chứa mật khẩu được mã hóa cho người sử dụng trên hệ thống, vì vậy chúng tôi không muốn chỉ là về bất cứ ai để có một cái nhìn vào nó! Vì vậy, bạn sẽ thấy phản hồi này:

cat: /etc/shadow: Permission denied

Chúng ta có thể thấy lý do tại sao bằng cách xem xét các quyền của tệp:

ls -l /etc/shadow
-rw------- 1 root root 821 Jun 11 22:13 /etc/shadow

Điều này cho chúng ta biết rằng tập tin được sở hữu bởi root và chỉ chủ sở hữu mới có quyền đọc / ghi. Hãy phá vỡ đầu ra đó.

-rw-------

Đây là trạng thái của các quyền. Bit đầu tiên cho chúng ta biết loại tệp ( -có nghĩa là tệp thông thường). Ba bit tiếp theo thể hiện các hành động có sẵn cho chủ sở hữu của tệp. Ba bit thứ hai đại diện cho nhóm và ba bit cuối cùng dành cho người khác hoặc mọi người khác. Do đó, một thư mục có đầy đủ quyền sẽ trông như thế này:

drwxrwxrwx  10 root root   280 Jun 20 11:40 tmp/

Đó là đọc, viết và thực thi quyền cho chủ sở hữu, nhóm và mọi người khác.

Phần quan trọng tiếp theo là hai cái tên. Trong trường hợp của chúng tôi root root. Người dùng đầu tiên là chủ sở hữu của tập tin. Thứ hai là nhóm người dùng . Ví dụ, nó thường được thấy:

drwxr-xr-x  10 pi users   280 Jun 20 11:40 home/pi

Điều này sẽ cho phép truy cập đọc / ghi cho người dùng pitrên thư mục chính của anh ta và truy cập đọc cho tất cả người dùng khác.

Quyền thường được đề cập và kiểm soát bằng cách sử dụng các giá trị bát phân. Ví dụ: nếu chúng tôi muốn đặt rw chỉ cho chủ sở hữu, chúng tôi sẽ nhập:

chmod 600 /path/to/file

Đây là một tổng quan cơ bản, để biết thêm chi tiết về quyền truy cập tệp Linux, đây là một bài viết tốt.


Sự hiểu biết này rất quan trọng khi bảo mật các tập tin và thư mục. Ví dụ: giả sử chúng tôi vừa thiết lập khóa SSH. Chúng tôi chắc chắn không muốn bất kỳ người dùng nào khác nhìn thấy trong ~/.sshthư mục của chúng tôi , hoặc họ sẽ có thể lấy khóa riêng của chúng tôi. Vì vậy, chúng tôi loại bỏ các đặc quyền đọc của họ:

chmod 700 ~/.ssh
ls -la ~/.ssh 
drwx------   2 james users  4096 Jun 18 03:05 .

Tôi hy vọng điều này sẽ làm sáng tỏ một số lo ngại của bạn với việc bảo mật Linux. Từ điều này bạn sẽ có thể thấy rằng đó là một hệ thống khá an toàn và nếu bạn cẩn thận, bạn sẽ không gặp vấn đề gì về bảo mật.


10
Tôi không đồng ý với nhận xét tối nghĩa của bạn, sẽ mất vài giây để ánh xạ các cổng mở trên thiết bị của bạn và tìm máy chủ ssh của bạn. Vô hiệu hóa đăng nhập mật khẩu và dính vào các cổng bình thường. Tôi nghi ngờ bạn cần ftp ở tất cả, sử dụng scp thay thế.
Alex Chamberlain

2
@AlexChamberlain Đây là một cú hích tốc độ tạm thời cho những kẻ tấn công, nhưng không có nghĩa là một giải pháp hoàn chỉnh một mình.
Jivings

4
Thay đổi cổng mặc định có xu hướng hạ thấp tiếng gõ cửa thường dẫn đến các cuộc tấn công từ điển. Chắc chắn đó là một biện pháp bảo mật cực kỳ nhỏ nhưng nó cũng có những lợi ích khác, tức là nó có thể hạn chế sự phình to của nhật ký. Đó là một hành động phòng ngừa hơn là bảo mật nhưng vẫn đáng để xem xét.
Beeblebrox

2
@AlexChamberlain, Trong cuộc tranh luận về khóa ssh của debian, chúng tôi đã ghi lại rất nhiều lần thử tại cổng 22 và không ở đâu khác. Trong trường hợp đó, chạy trên một cổng khác sẽ khiến bạn mất rất nhiều thời gian trong khi các tin tặc đang cố gắng tìm ra máy chủ khai thác nào có giá trị. SBO không giúp được gì nhiều nếu kẻ tấn công nhắm vào bạn một cách cụ thể.
John La Rooy

1
Tôi đồng ý. Quan điểm của tôi là nó không chỉ là thereotical - đã có một thời gian trong bộ nhớ gần đây, nơi SBO chắc chắn đã giúp đỡ, và tạo ra một ý nghĩa khác biệt.
John La Rooy

6

Để ngăn chặn các cuộc tấn công bruteforce, bạn có thể cài đặt và cấu hình fail2ban. Nó sẽ phân tích các tệp nhật ký (chẳng hạn như /var/log/auth.log) và cố gắng phát hiện nếu một số lần đăng nhập thất bại. Sau đó, nó sẽ tự động cấm các địa chỉ IP nguồn với iptables.

Có một loạt các howtos trên Internet.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.