Chuyển đến nội dung chính

Những câu hỏi phỏng vấn kỹ sư bảo mật thường gặp.

Dưới đây là một danh sách các câu hỏi thường được sử dụng trong việc phỏng vấn tuyển dụng chuyên gia bảo mật. Nhiều câu hỏi được thiết kế buộc người được phỏng vấn phải suy nghĩ, và không thể chuẩn bị trước cho dạng câu hỏi này. Ở đó, các phản ứng của ứng viên cũng quan trọng  như câu trả lời.
Một số câu hỏi được pha trộn giữa kỹ thuật và lý thuyết, hoặc câu hỏi tìm hiểu quan điểm của ứng viên để tạo ra những câu hỏi khó khăn hơn. Các câu hỏi cũng thường được chia thành các thể loại khác nhau, một số câu hỏi mẹo sẽ được chèn vào giữa. Mục đích của những câu hỏi dạng đánh đố này là tìm kiếm những điểm yếu kỹ thuật thường chỉ xuất hiện khi ứng viên đi vào làm việc :| .

Nhóm câu hỏi chung
1. Giữa các dự án mã mở và mã đóng, bên nào bảo mật hơn?
Câu trả lời của ứng viên sẽ nói rất nhiều về họ. Nó cho thấy 1) họ biết những khái niệm gì trong phát triển phần mềm, 2) cho thấy mức độ chín chắn của ứng viên. Mục tiêu chính của câu hỏi là đưa ra được ưu/ nhược điểm của hệ mã đóng và mã mỡ.  Nếu ứng viên không trả lời được, chứng tỏ trình độ anh ta có hạn. Nếu anh ta cho rằng  “một người bất kỳ có thể đặt mã độc vào nhân hệ thống”, góc nhìn của ứng viên còn chưa toàn diện.
Câu trả lời lý tưởng phải bao gồm kích thước dự án, số lập trình viên làm việc trên dự án đó (và trình độ của họ), phần quan trọng nhất là quy trình quản lý chất lượng của dự án. Ta không thể nói rằng dự án là bảo mật hay không chỉ dựa vào việc nó là đóng hoặc mở. Có nhiều ví dụ về những lỗi bảo mật khủng khiếp xảy ra cho cả hai dạng dự án.
2. Làm thế nào để cấu hình DNS trên Linux/Windows?
Đây là một câu hỏi cơ bản cho các vị trí quản trị hệ thống (bảo mật hệ thống). Nếu ứng viên không biết cách làm một việc đơn giản là đổi cấu hình DNS trong 2 hệ điều hành phổ biến nhất thế giới, không có gì đảm bảo cho những kiến thức của anh ta.
3. Nêu điểm khác nhau giữa encode, encrypt và hashing? (mã hóa, mật mã và hàm băm)
Encode (mã hóa) được thiết kế để bảo vệ toàn vẹn dữ liệu khi truyền tải qua các hệ thống mạng, đường truyền… đảm bảo thông điệp đến nơi là thông điệp ban đầu, trong mã hóa các vấn đề bảo mật không phải là vấn đề chính được quan tâm. Thông điệp mã hóa (encode) có thể dễ dàng được dịch ngược thành văn bản vì các hệ mã hóa (encode) thường được sử dụng rộng rãi. Mật mã (encryption) thì được thiết kế để đảm bảo tính an toàn và bí mật của thông tin, chỉ có thể dịch ngược bản mã nếu có “chìa khóa”. Hàm băm (hashing) lại là một khái niệm khác, nó là hàm một chiều, không thể đảo ngược, đầu ra của hàm băm thường ngắn hơn đầu vào và có chiều dài cố định.
4. Bạn biết những ai trong lĩnh vực bảo mật thông tin? Tại sao?
Một câu hỏi tiêu chuẩn. Những gì nhà tuyển dụng muốn biết ở đây là ứng viên quan tâm đến những nhân vật nào trong ngành, và có một cái nhìn sâu hơn về việc anh ta tiếp cận bảo mật như thế nào. Nếu ứng viên nên một danh sách các hacker/ tội phạm lừng lẫy, hoặc nếu anh ta nhầm lẫn trong thành tựu của vài nhà phát triển tên tuổi, bạn sẽ biết thêm một ít về anh ta. Trường hợp ứng viên không biết ai trong ngành Bảo Mật, nhà tuyển dụng có thể sẽ phải kết thúc sớm buổi phỏng vấn hơn dự kiến.
5. Bạn biết các tin tức bảo mật qua nguồn nào?
Câu hỏi này được đặt ra để tìm hiểu cách thức ứng viên tương tác với cộng đồng bảo mật. Những câu trả lời hợp lý có thể giống như Team Cymru, Reddit, Twitter, Facebook Group… Không quan trọng ứng viên nhắc tới những nguồn nào miễn là anh ta không trả lời dạng “Tôi xem từ website CNET, mediafire” hay “tôi chờ ai đó nói cho tôi biết”.
6. Nếu bạn phải mã hóa (encrypt) và nén dữ liệu trong khi truyền tải, bạn sẽ làm thao tác nào trước, tại sao?
Nếu ứng viên không biết câu trả lời, không sao cả. Quan trọng là họ phản ứng thế nào với câu hỏi? Nó làm ứng viên hoảng sợ hay thích thú và suy nghĩ? Tôi (tác giả) đã được hỏi câu này khi phỏng vấn tại Cisco. Tôi nói với người phỏng vấn tôi không biết câu trả lời và cần vài giây suy nghĩ. Sau 10s suy nghĩ tôi trả lời anh ta: “Nén và sau đó mã hóa. Nếu mã hóa trước văn bản sẽ nén được ít hơn do dữ liệu sau mã hóa gần như ngẫu nhiên.”
7. Mã hóa đối xứng và mã hóa khóa công khai khác nhau ở điểm nào
Câu trả lời chuẩn gồm: một khóa – hai khóa, …
8. Trong mã hóa khóa công khai bạn có khóa công cộng và khóa riêng tư, bạn thường dùng chúng để mã hóa cũng như ký chữ ký điện tử? Cho biết khóa nào dùng với thao tác nào?
Người ta mã hóa bằng khóa công khai của người nhận tin, và ký bằng khóa riêng tư  của mình. Nếu ứng viên nhầm lẫn hai khóa, đừng để anh ta đụng vào các dự án PKI (Public Key Infastructure.
9. Mạng tại nhà bạn thuộc dạng gì?
Câu trả lời tốt là câu trả lời cho thấy ứng viên là một người có niềm đam mê máy tính/công nghệ/bảo mật hơn là một người chỉ kiếm công việc lương cao. Nếu anh ta có nhiều hệ thống chạy trên nhiều hệ điều hành khác nhau thì thật tuyệt. Những gì nhà tuyển dụng không muốn nghe là “tôi có đủ máy tính ở nơi làm việc…” Tôi chưa bao giờ gặp một chàng trai bảo mật nào mà không có một mạng phức tạp tại nhà, hoặc trong máy ảo, hay ít nhất thường truy cập vào một mạng nào đó ngoài nhà.

Nhóm câu hỏi an ninh mạng
1. ping làm việc trên cổng nào?
Đây là một câu hỏi mẹo, nhưng quan trọng. Nếu ứng viên bắt đầu đưa ra một danh sách các cổng, nhà tuyển dụng có thể nhanh chóng bỏ qua và chuyển sang người kế tiếp. Gợi ý: ICMP là một giao thức lớp 3 (không làm việc trên cổng nào). Một biến thể tốt của câu hỏi này là hỏi ping sử dụng TCP hay UDP. Trả lời một trong hai đều sai, chúng đều là giao thức lớp 4.
2. traceroute/tracert hoạt động trên giao thức tầng nào?
Đây là một câu hỏi thuần kỹ thuật về một khái niệm khá quan trọng. Nó không thực sự là một câu hỏi “bảo mật”, nhưng nó cho thấy ứng viên có hứng thú trong việc tìm hiểu cách các hệ thống hoạt động hay không, một tính chất không thể thiếu của các chuyên viên Bảo Mật. Nếu ứng viên có thể cho biết điểm khác nhau giữa Linux và Window, cho anh ta một điểm cộng :)
Có một điểm quan trọng và thường hay bị nhầm lần là mục tiêu của gói tin. Nhiều người thường nghĩ là gói tin đầu tiên được gửi đến 1 trạm, sau đó gửi đến trạm thứ 2 trên đường đi… cứ như vậy đến trạm cuối. Thực ra mỗi gói tin đều có đích là trạm cuối, chỉ có biến TTL được thay đổi. Điểm cộng khác là Window mặc định sử dụng ICMP trong khi linux sử dụng UDP.
(Nói thêm một xíu về traceroute trong linux: trong linux, để gửi gói ICMP cần quyền su, trong khi lệnh /bin/ping được cài sẵn với suid-root, nó có thể gửi gói ICMP bình thường, trong khi traceroute thì không, bạn có thể thử dùng ICMP với traceroute bằng cách thêm tham -I, với user thường, bạn sẽ nhận được thông báo “You have no enough privileges”)
3. Những điểm mạnh/yếu của Linux so sánh với Window?
Câu hỏi xác định những định kiến. Ứng viên có ghét Windows và từ chối làm việc trên nó? Đây là một dấu hiệu chưa trưởng thành sẽ mang đến nhiều vấn đề trong công việc sau này. Nếu ứng viên là một fan cuồng của Windows và ghét Linux? Anh ta sẽ bị rớt ngay vì Linux có ở mọi nơi trong thế giới bảo mật.
4. Khi muốn tạo một liên lạc bí mật trên một kênh truyền công cộng, phương pháp chính là gì?
Thuật toán thỏa thuận khóa Diffie-Hellman. Nếu ứng viên đáp đúng, hỏi anh ta câu tiếp theo.
5. Cho biết điểm khác nhau giữa Diffie-Hellman và RSA?
Diffie-Hellman là giao thức trao đổi khóa, trong khi RSA là giao thức mã hóa/ ký tên. Nếu ứng viên đã đi xa tới đây, hãy chắc chắn anh ta có thể thấy được sự khác biệt lớn nhất: RSA yêu cầu phải có khóa trước, trong khi DH thì không.
6. Loại tấn công nào mà Diffie-Hellman dễ bị tổn thương nhất?
Tấn công Man-in-the-middle, khi không bên nào được xác thực.

Nhóm câu hỏi bảo mật ứng dụng
1. Mô tả chương trình/ script bạn viết gần nhất. Nó giải quyết vấn đề gì của bạn?
Những gì nhà tuyển dụng muốn thấy ở đây là các biểu cảm trên khuôn mặt chàng ứng viên. Nếu chàng ta hoảng loạn, nhà tuyển dụng không chỉ biết anh ta không phải lập trình viên (không nhất định là xấu) mà anh ta ngại lập trình (điểm xấu). Tôi biết điều này gây tranh cãi, nhưng tôi nghĩ rằng các mức độ bảo mật cao luôn luôn cần các kỹ năng lập trình. Họ không cần là một coder siêu hạng, nhưng phải hiểu những khái niệm cơ bản và ít nhất có thể viết vài script khi cần thiết.
2. Làm thế nào để tạo một vùng đăng nhập trên một trang web có lưu lượng truy cập lớn, nơi cần cân nhắc tới hiệu suất?
Câu hỏi nhằm mục đích tìm hiểu những hiểu biết cơ bản như lý do sử dụng HTTP trong các trang tin, trong khi login form cần phải sử dụng HTTPS, tại sao như vậy? Phần quan trọng của câu trả lời là các hiểm họa MiTM gặp phải khi sử dụng thuần HTTP. Bỏ qua câu hỏi tức họ chưa bao giờ nghe nói tới vấn đề này, nghĩa là họ không phải là một ứng viên chuyên nghiệp đang được tìm kiếm.
3. Tấn công CSRF là gì (Cross-Site Request Forgery)?
Là dạng tấn công khi kẻ tấn công có thể làm cho trình duyệt nạn nhân gửi đi các request (bằng cách lừa click vào một link, dùng iframe…) cùng với các thông tin chứng thực. Một ví dụ là khi một tag IMG có url của một tác vụ trên web, ví dụ http://site.com/logout/. Nạn nhân khi vào trang có thẻ IMG này sẽ tự động logout khỏi site.com khi browser load tới thẻ IMG đó, trong khi nạn nhân không biết gì.
4. Làm thế nào để phòng chống CSRF?
Nonce là một câu trả lời chấp nhận được, mặc dù nó là một phương pháp rất phức tạp. Câu hỏi đưa ra với mục đích kiểm tra những kiến thức cơ bản, không phải là vấn đáp luận án chuyên viên bảo mật. Nhà tuyển dụng cần điều chỉnh yêu cầu cho các vị trí cụ thể.
5. Nếu bạn là quản trị website, làm sao bạn tìm ra các dấu hiệu tấn công CSRF?
Đây là một câu hỏi thú vị, và nó yêu cầu ứng viên thiết lập một số nguyên tắc cơ bản. Các câu trả lời tốt là: “Chúng ta có tích hợp nonce chưa?” Hay “điều đó phụ thuộc vào chúng ta có kiểm soát tại…” Những câu trả lời kém gồm kiểm ra referrer header, hoặc trả lời lung tung.
(nonce: number used once)
6. Điểm khác nhau giữa HTTP và HTML là gì?
Hiển nhiên câu trả lời là một là giao thức mạng tầng application, bên kia là một ngôn ngữ đánh dấu. Ở câu hỏi này điểm quan trọng vẫn là biểu cảm ứng viên :D
7. HTTP xử lý các trạng thái như thế nào? (How does HTTP handle state?)
HTTP không xử lý các trạng thái. Câu trả lời tốt có thể gồm “sử dụng cookies” hay những thứ tương tự, nhưng câu trả lời tốt nhất là cookies là một phương pháp bổ sung cho việc HTTP không làm điều đó.
8. CSS (Cross Site Scripting) là gì?
Bạn sẽ ngạc nhiên khi biết rằng có rất nhiều ứng viên bảo mật không trả lời được câu hỏi cơ bản này. Đáp án là kiểu tấn công trong đó hacker khiến nạn nhân thực thi một đoạn script (thường là javascript) trên trình duyệt của họ.
9. Nêu điểm khác biệt giữa tấn công XSS lưu trữ và XSS phản xạ? (stored vs reflected)
Trong XSS lưu trữ, đoạn script được lưu trên một trang tĩnh hoặc lấy ra từ  cơ sở dữ liệu và hiển thị trực tiếp cho người dùng. Với XSS phản xạ thì người dùng bị lừa gửi đi một request (được tin tặc thiết kế), và đoạn script độc hại được gửi về từ trang web.
10. Phương pháp phòng chống XSS thường gặp là gì?
Kiểm tra đầu vào, làm sạch đầu ra.

Nhóm câu hỏi về doanh nghiệp/nguy cơ
1. Mục tiêu bảo mật thông tin trong một tổ chức là gì?
Đây là một câu hỏi lớn. Điều tôi muốn tìm kiếm ở đây là mộ trong hai hướng tiếp cận sau: Một là cách tiếp cận đóng, ví dụ “kiểm soát tất cả các truy cập thông tin càng nhiều càng tốt”, điều này cho thấy một chút non nớt ở ứng viên, không nhất định là xấu nhưng không hẳn là điều tôi đang tìm. Một câu trả lời tốt hơn là “Để giúp công ty thành công”. Câu trả lời này cho thấy ứng viên hiểu rõ một công ty thương mại có mục đích chính là kiếm tiền, và anh ta tới là để giúp công ty. Cách trả lời này thể hiện một quan điểm mà tôi cho rằng là mức cao nhất của hiểu biết an ninh – nhận thức rằng an ninh là để giúp công ty, không gì hơn.
2. Điểm khác biệt giữa mối đe dọa, lỗ hổng, và nguy cơ (threat, vulnerability, and a risk) ?
Hiểu rõ về những khái niệm căn bản như nguy cơ, lỗ hổng, mối đe dọa, rủi ro … và phân biệt được chúng là một yếu tố quan trọng trong kỹ năng của chuyên viên bảo mật. Nhà tuyển dụng có thể hỏi càng nhiều càng tốt, nhưng phải biết rằng các chương trình chứng chỉ/ đào tạo có thể định nghĩa hơi khác nhau một chút, chỉ cần câu trả lời của ứng viên rõ ràng và nhất quán là hợp lệ.
3. Nếu bạn bắt đầu làm việc như kỹ sư đứng đầu hoặc CSO tại một công ty cỡ bự, người tiền nhiệm của bạn bị sa thải vì bất tài, việc đầu tiên bạn làm là gì? [Tưởng tượng ngày đầu làm việc mà không biết gì về môi trường hệ thống công ty]
Ứng viên không nên liệt kê một danh sách những việc cần làm, điều muốn nói ở đây là những vấn đề căn bản. Dữ liệu quan trọng là gì? Ai tương tác với nó? Sơ đồ mạng, các điểm cảm ứng thị giác (không hiểu ý tác giả lắm :| ), bộ lọc cho dữ liệu vào/ra. Những đánh giá bảo mật về điểm yếu trong hệ thống trước đó. Những thông tin đăng nhập nào đã được kiểm toán? … Điều quan trọng là ứng viên phải nhanh chóng đưa ra cho thấy được những điểm ưu tiên cần biết khi làm việc với một hệ thống tiếp xúc lần đầu.
4. Trong một công ty bảo mật thông tin chuyên nghiệp, nên đặt trọng tâm vào điều gì: mối đe dọa hay lỗ hổng?
Đây là một câu hỏi quan điểm. Nhà tuyển dụng xem xét chất lượng của câu trả lời thay vì so sánh với một đáp án đúng. Câu trả lời của tôi là lỗ hổng nên được quan tâm nhiều hơn vì các công ty hiện tại ít kiểm soát các mối đe dọa.
Một quan điểm khác là, mối đe dọa vẫn luôn luôn còn đó, trong khi lỗ hổng khi xuất hiện sẽ có người đưa ra các bản vá lỗi ngay. Vì vậy chúng ta nên tập trung vào các mối đe dọa: thiết kế phòng thủ sâu dựa trên các mô hình mối đe dọa, với các lỗ hổng thì chỉ cần giữ hệ thống luôn cập nhật là ổn.
Cả hai quan điểm này đều đúng, quan trọng là ứng viên trình bày thế nào.

Các câu hỏi nâng cao

1. Nếu tôi cắm dây mạng của công ty vào laptop này, bao nhiêu gói tin sẽ đi qua card mạng của tôi khi tôi traceroute tới twitter.com
Trong câu hỏi này, ứng viên phải xem xét các yếu tố trong tất cả các lớp: Ethernet, IP, DNS, ICMP/UDP,… và phải xem xét tới các gói phản hồi. Điều nhà tuyển dụng muốn nhìn thấy là cách tiếp cận và giải quyết vấn đề của ứng viên. Phản ứng sai của ứng viên có thể là há hốc miệng hoặc kếu lên “WTF?”
2. Bạn làm thế nào để tạo ra một mạng botnet lớn?
Câu trả lời có thể rất rộng, ứng viên phải cho thấy những kiến thức cơ bản sau: mã hóa, DNS luân chuyển,  sử dụng các giao thức phổ biến, kỹ thuật ẩn giấu, cơ chế cập nhật,… Câu trả lời kém có thể là “tôi không tạo botnet, tôi diệt chúng.”
3. Kịch bản nhập vai
Nhà tuyển dụng đưa ra một kịch bản, trong đó ứng viên là một chuyên gia tư vấn, nhà tuyển dụng vào vai một khách hàng đang cần sự giúp đỡ.
Ví dụ, một khách hàng gọi tới vì họ vừa nhận thông báo từ ISP rằng nhiều máy tính trong hệ thống mạng của họ đã bị xâm nhập. Và yêu cầu chuyên gia giúp đỡ sửa chữa. Ứng viên đưa ra các câu hỏi, nhà tuyển dụng trả lời yes/no và ứng viên cố gắng xác định vấn đề, xử lý sự cố… đến khi nhà tuyển dụng kết thúc kịch bản hoặc ứng viên giải quyết được vấn đề.

Kết luận
Những câu hỏi trên chỉ là các câu hỏi chọn lọc ứng viên, nghĩa là người thất bại chắc chắn bị loại. Nhưng không có nghĩa là những người trả lời tốt sẽ được tuyển dụng. Để biết thêm về việc chọn lọc ứng viên của các nhà tuyển dụng, mời xem thêm tại http://danielmiessler.com/study/hiring/

Nhận xét

Bài đăng phổ biến từ blog này

So sánh giấy phép mã nguồn mở Apache, MIT, GPL

Mã nguồn mở ngày nay đã và đang trở nên phổ biến hơn bao giờ hết, những dự án mã nguồn mở có thể được tìm thấy hầu như ở bất kì đâu trên không gian mạng rộng lớn này. Tuy nhiên dù có “mở” đi chăng nữa thì những phần mềm mã nguồn mở phải tuân theo những giấy phép nhất định. Điển hình là 3 loại giấy phép phổ biến nhất là Apache, MIT và GPL. Vậy, giữa chúng có gì khác nhau. Trước hết, giấy phép mã nguồn mở là một loại giấy phép được sử dụng cho các phần mềm mã nguồn mở. Giấy phép này cho phép bất kì cá nhân hay tổ chức nào cũng có thể nghiên cứu, thay đổi, chỉnh sửa và cải tiến phần mềm, và phân phối ở các dạng khác nhau như thay đổi hoặc chưa thay đổi. Giấy phép Apache Giấy phép Apache ra đời bởi Quỹ Phần mềm Apache (Apache Software Foundation - ASF). Đây là một giấy phép phần mềm tự do, không có copyleft, bắt buộc trong việc thông báo bản quyển và lời phủ nhận. Giấy phép này hoạt động như các giấy phép phần mềm mã nguồn mở khác, trao cho người sử dụng phần mềm quyền tự do trong b

Mã hóa đối xứng và bất đối xứng

Hôm nay mình xin được nói về hai thuật toán cơ bản và quan trong nhất trong bảo mật đó là mã hóa đối xứng và mã hóa bất đối xứng . 1. Mã hóa đối xứng (mã hóa không công khai- symmetric-key algorithms ) - Là lớp thuật toán các mã hóa trong đó việc mã hóa và giải mã đều dùng chung cho 1 khóa (secret key) 1.1 Các loại thuật toán khóa đối xứng Thuật toán đối xứng có thể được chia ra làm hai thể loại, mật mã luồng ( stream ciphers ) và mật mã khối ( block ciphers ). Mật mã luồng mã hóa từng bit của thông điệp trong khi mật mã khối gộp một số bit lại và mật mã hóa chúng như một đơn vị. Cỡ khối được dùng thường là các khối 64 bit. Thuật toán tiêu chuẩn mã hóa tân tiến ( Advanced Encryption Standard ), được NIST công nhận tháng 12 năm 2001, sử dụng các khối gồm 128 bit. Các thuật toán đối xứng thường không được sử dụng độc lập. Trong thiết kế của các hệ thống mật mã hiện đại, cả hai thuật toán bất đối xứng ( asymmetric ) (dùng chìa khóa công khai) và thuật toán đối xứng được sử

Chuyện nghề Kiểm thử an toàn thông tin

Từ hồi đi làm đến giờ, tôi gặp nhiều tình huống không biết nên trả lời thế nào cho đúng, hôm nay ghi lại đây để mai mốt ai có gặp tham khảo. Khi được liên hệ, tôi thấy đa phần các đơn vị làm xong rồi mới nghĩ đến chuyện kiểm thử, thậm chí là bị hack rồi mới nghĩ tới. Việc pentest nên được triển khai ngay từ khi Phân tích thiết kế hệ thống . Các luồng đi của dữ liệu khi phác thảo ý tưởng ở trên giấy cũng cần kiểm tra tính an toàn, nếu để đến khi đã ra sản phẩm rồi thì đi sửa lại mất nhiều thời gian, công sức hơn nhiều, thậm trí sửa lại sinh ra lỗi mới. Nhiều người vẫn đánh giá các sản phẩm cầm nắm được giá trị hơn sản phẩm trí tuệ, hay sáng tạo. Giống thằng em tôi làm graphic designer hay "được nhờ" vẽ hộ logo hai cái này cái kia, có khi mất cả ngày hoặc nhiều hơn, trong khi không được đồng nào, có khi còn bị chê :)). Nếu làm tốt việc gì đó, đừng bao giờ làm miễn phí hoặc lấy giá quá rẻ . Nghe đồn Louis Vutton đốt trụi rũi hàng ế, chứ chưa bao giờ chịu giảm giá. Relax với chuy