text:
14. Banner, thật hay giả?:
Một tuần lễ trôi qua. Tôi nhận được vài e-mail của bộ tứ cuti, ccxx, docco và haothu với nội dung phần lớn là những thắc mắc về lý do tại sao việc xác định "footprint" của mục tiêu lại quan trọng đến như vậy. Tôi quá bận rộn nên chỉ hồi đáp một cách tổng quát và hẹn lần 'đà khía' kế tiếp sẽ trả lời chi tiết hơn. Tôi cũng không quên nhắc mấy 'trự' nên xem kỹ cơ chế truyền tải thông tin của giao thức TCP vì nó sẽ dẫn đến một bước sâu hơn trong việc tìm "footprint" của mục tiêu. Bộ tứ đề nghị hoãn lại cuộc 'đà khía' thêm một tuần để đủ thời gian chuẩn bị và tất nhiên là tôi đồng ý.
Thêm một tuần lễ trôi qua. Tôi nhận được một offline message của 'cuti' hẹn cuối tuần gặp nhau trên YIM. Tôi đồng ý.
Chiều thứ bảy, lúc 2 giờ trưa tôi vào YIM thì bộ tứ đã có mặt đầy đủ. Trong chốc lát tôi nhận được lời mời tham gia "conference".
'cuti nhanh nhảu:
"Chào anh, anh khoẻ hông? Bọn em lên đây cả tiếng đồng hồ rồi. Đang nói chuyện tầm phào cho vui trong khi chờ anh đó."
Tôi chào bộ tứ:
"Chào mấy đứa. Khoẻ hết chớ? Sao lên sớm vậy? Khoa có chuyện gì mà vắng mặt lâu vậy em?"
'haothu' đáp:
"Dạ em kẹt một số chuyện gia đình nhưng mọi chuyện xong hết rồi. Bây giờ em sẽ tham gia 'đà khía' đều đặn hơn. Em cũng lấy nội dung mấy lần trước để xem hết rồi anh."
'ccxx' đi ngay vào vấn đề:
"Em có gởi mail hỏi anh lý do tại sao việc xác định 'footprint' lại quan trọng như vậy và anh hứa là anh sẽ giải thích chi tiết. Vậy bây giờ anh tiện giải thích không anh?"
'docco' chêm vào:
"Ui, không ngờ bà Như lanh thiệt. Tui chưa kịp hỏi bà đã hỏi rồi. Anh D ơi, em đọc kỹ lại mấy bài anh em mình 'đà khía' thì thấy việc dò tìm và xác định 'footprint' của mục tiêu rất quan trọng. Như anh đã đề cập trước đây muốn khai thác một mục tiêu thì phải nắm rõ mục tiêu. Tuy nhiên, em vẫn chưa hoàn toàn nắm được vấn đề một cách xác thực. Anh nói rõ hơn được không anh?"
Tôi đáp:
"Ừa, việc xác định 'footprint' quan trọng và mất thời gian bởi vì nó quyết định cho sự thành công hay thất bại của việc thâm nhập. Nói trên bình diện bảo mật, che dấu hoặc thay đổi 'footprint' sẽ phần nào đánh lạc hướng hoặc làm chậm kẻ muốn tấn công. Những hệ thống, những máy chủ không có gì bảo vệ thì chẳng có gì đáng nói; chỉ cần một vài thao tác là em đã có thể xác định 'footprint' của nó cho nên việc xác định 'footprint' không còn đáng kể nữa. Tuy nhiên, có những trường hợp admin của hệ thống nào đó cố tình thay đổi 'footprint' của hệ thống để đánh lừa kẻ muốn tấn công thì sự thể hoàn toàn khác."
'haothu' hỏi tiếp:
"Cụ thể như thế nào anh? Em thấy khó hình dung quá :("
Tôi trả lời:
"Ừa, quả thật là hơi khó hình dung nếu em chưa 'kinh qua' những chuyện này. Hãy thử 'đào xới' một tí xem sao? Anh nhớ đã có lần anh đề cập đến chuyện 'các trình độ thâm nhập' rồi phải không?"
'cuti' đáp:
"Dạ, có phải ý anh là chuyện 'dân hacker thứ thiệt' tự thử nghiệm và tìm lỗi để thâm nhập, 'dân hacker bán chuyên' thì dựa vào lỗi đã được công bố trên bug-track và dân 'kiddie' thì chỉ dùng công cụ có sẵn' không vậy?"
Tôi đáp:
"Ừa, đúng vậy. Hãy thử nghĩ xem, trường hợp 'dân hacker thứ thiệt tự thử nghiệm và tìm lỗi', chuyện 'footprint' dính líu gì ở đây?"
'ccxx' đáp:
"Em nghĩ chuyện 'footprint' chẳng còn quan trọng với trường hợp 'hacker thứ thiệt' nữa."
Tôi hỏi tiếp:
"Em giải thích thêm một tí được không?"
'ccxx' đáp:
"Em thấy quá hiển nhiên mà anh? Nếu như 'hacker thứ thiệt' tự nghiên cứu và tìm lỗi thì hẳn nhiên anh ta phải làm việc cụ thể trên một hệ điều hành, trên một môi trường nào đó. Em hình dung là anh ta phải lập một máy chủ có hệ điều hành cụ thể, có phiên bản chương trình cụ thể rồi mới thử nghiệm và tìm lỗi. Cho nên, 'footprint' nằm trong tay anh ta là chuyện hiển nhiên."
Tôi cười, đáp:
"Rồi, cuti, haothu, docco nghĩ sao với nhận định này của 'ccxx'?"
Cả ba im lặng hồi lâu. Sau cùng, 'haothu' lên tiếng:
"Em nghĩ 'ccxx' nói đúng lắm nhưng nó chỉ giới hạn trong trường hợp tay 'hacker thứ thiệt' đó tìm lỗi trên chính máy chủ do mình thiết lập. Còn trường hợp tìm lỗi trên một server nào đó thì sao? Tay 'hacker thứ thiệt' ấy vẫn phải xác định 'footprint' như thường. Không biết em nói có đúng không?"
'docco' lên tiếng:
"Ý em cũng giống như ý thằng Khoa đó anh."
'cuti' góp phần:
"Đúng rồi. Tự thiết lập một máy chủ, cài soft rồi tìm lỗi cụ thể thì chuyện 'footprint' là chuyện không cần thiết vì mình đã thiết lập mọi thứ theo ý. Trường hợp các tay 'hacker thứ thiệt' thử dò tìm lỗi trên các máy chủ không phải do họ làm chủ có xảy ra không anh?"
Lúc này tôi mới lên tiếng:
"Anh tin rằng nhận định của 'ccxx' rất hữu lý. Hầu hết các trường hợp thử nghiệm và tìm lỗi xảy ra trên chính server mà tay 'hacker thứ thiệt' ấy thiết lập. Cho nên, chuyện xác định 'footprint' ở đây không còn là một việc cần thiết nữa. Riêng trường hợp thử nghiệm trên server không phải do mình thiết lập thì anh không thể xác định được vì chẳng có số liệu nào cho chuyện này. Tuy nhiên, anh hình dung rằng trường hợp 'thử trên server mình không làm chủ' vẫn có thể xảy ra nhưng khá ít. Lý do là thử nghiệm và tìm lỗi như thế khá mơ hồ và kém hiệu xuất. Hơn nữa, để thử nghiệm và tìm lỗi một cách đúng mức, em cần phải sử dụng hàng loạt công cụ như debugging, tracing... em phải lặp đi, lặp lại một test case với nhiều biến số khác nhau để tìm kết quả. Những thao tác này nằm trong khuôn khổ 'local', có nghĩa là em phải có quyền sử dụng và thực thi các công cụ ngay trên máy chủ để tìm lỗi."
Tôi dừng lại vài giây và hỏi tiếp:
"Vậy, trường hợp các 'hacker bán chuyên' dựa vào bug-track để thâm nhập thì dính líu gì đến chuyện 'footprint'?"
Lần này 'cuti' nhanh nhảu trả lời:
"Em nghĩ nó 'dính líu' nhiều lắm chứ. Em thấy trên bug-track ghi rõ lỗi trên hệ điều hành nào, cho phiên bản của software nào. Điều này chứng tỏ, nếu tìm cách áp dụng nó để exploit trên một hệ điều hành khác, trên phiên bản software khác thì cơ hội thành công hầu như không có. Bởi vậy, dân 'bán chuyên' phải đi qua chặng đường xác định xem mục tiêu của mình có rơi vào 'phạm vi' con bug đã được công bố hay không thì mới có kết quả khả quan."
Tôi đáp:
"Hay lắm. Mấy đứa còn ý kiến nào khác không?"
'docco' lên tiếng:
"Em nghĩ Hưng nói đúng quá rồi. Chỉ có điều 'dân bán chuyên' xác định 'footprint' ra sao đây?"
Tôi cười, đáp:
"Đó. Bây giờ em đã nhận ra tầm quan trọng của việc xác định 'footprint' chưa? Chuyện 'dân bán chuyên' xác định 'footprint' ra sao thì mình sẽ bàn đến."
'haothu' trả lời:
"Chuyện này thì quá rõ rồi. Nếu không xác định được 'footprint' thì chỉ có nước làm... mò mà thôi."
Tôi đẩy thêm:
"Rồi, mình đã xác định được hai trường hợp. Nếu vậy thì trường hợp các 'kiddie' tìm đâu ra vài món đồ nghề thì dính líu gì đến 'footprint' nhỉ?"
'ccxx' cười xoà:
"Hi hi hi, em nghĩ là anh đang hỏi mẹo cái gì đây rồi. Nếu dựa trên khái niệm thế nào là 'kiddie' mà anh đưa ra trước đây thì mấy tay này có sá gì 'footprint' hay không đâu anh? Vả lại, liệu họ có kiên nhẫn hoặc kiến thức để tìm 'footprint' hoặc quý trọng kết quả mình tìm được ở mức độ thăm dò hay không?"
'docco' phản đối:
"Tui không đồng ý với bà Như điểm này. Hiện nay có quá nhiều công cụ từ thương mại đến mã nguồn mở và những công cụ này rất mạnh, rất dễ dùng và cũng rất nguy hiểm. Nếu 'kiddie' chịu khó một tí thì chuyện gì cũng có thể được cả."
'ccxx' phản đòn:
"Vậy ý ông 'kiddie' đủ khả năng và kinh nghiệm xác định 'footprint' bằng cách dùng công cụ nào đó một cách dễ dàng? Tui không tin như vậy. Cho dù có dùng tool nào đó, dù dễ đến đâu, ông cũng cần có ít nhiều kiến thức trong lãnh vực này trước khi có thể dùng nó một cách hiệu quả. Liệu 'kiddie' có chịu khó đọc hướng dẫn một cách cẩn thận trước khi dùng không? và liệu sau khi lấy được thông tin nào đó, họ có đủ sức đối chiếu với thông tin được công bố hay tìm cách xác định lại thông tin tìm được xem chúng có đáng tin cậy hay không?"
'haothu' xen vào:
"Hì hì, bà Như đánh giá 'kiddie' thấp quá vậy? Bản thân tui thì quả thật tui thấy hơi oải khi phải dùng một công cụ chạy trên dòng lệnh và phải đọc hướng dẫn sử dụng. Loại công cụ này thường có hướng dẫn quá ngắn gọn, đọc xong phải vận dụng, suy nghĩ thì mới dùng được. Tuy vậy, nếu tui mà 'kết' một cái gì thì tui sẵn sàng bỏ công ra để lãnh hội nó thôi."
'cuti' góp chuyện:
"Em cũng thấy Khoa nói đúng đó. Bản thân em cũng bị dính vào cảm giác này."
Tôi hướng câu chuyện về trọng điểm:
"OK, cứ cho là có 'kiddie' có thể dùng các công cụ để xác định 'footprint' một cách không khó khăn, vậy, mình có thể thấy được tầm quan trọng của việc xác định 'footprint' rồi chứ? 'haothu', em thấy sao?"
'haothu' lững lờ:
"Dạ, trên mặt nguyên tắc thì sự thể rõ ràng hơn rồi nhưng cái này chắc phải bắt tay vào làm thì mới đánh giá đúng mức được tầm quan trọng của việc tìm 'footprint' thôi."
Tôi cười, cố gút vấn đề lại:
"OK, em thử hình dung xem, có bao nhiêu phần trăm 'hacker chuyên', bao nhiêu phần trăm 'hacker bán chuyên' và bao nhiêu phần trăm là 'kiddie'?"
'haothu' trả lời:
"Số lượng chính xác thì em không có rồi đó nhưng em nghĩ rằng số 'kiddie' chắc là chiếm đa số, sau đó là đến nhóm 'hacker bán chuyên'. Nhóm 'hacker chuyên' thì có lẽ chỉ chiếm thiểu số mà thôi."
Tôi hỏi tiếp:
"Vậy, em thử hình dung có bao nhiêu phần trăm 'kiddie' sẽ tìm tòi 'footprint' khi vớ phải một công cụ dùng để tấn công nào đó? Có bao nhiêu phần trăm dân 'bán chuyên' phải mó tới chuyện 'footprint'? Và nếu họ (cả 'kiddie' lẫn 'dân bán chuyên') không mó đến chuyện 'footprint' thì tỉ lệ thành công sẽ nằm ở mức nào?"
Không đợi 'haothu' trả lời, 'docco' chen vào:
"Theo em thì tỉ lệ thành công gần như không có. Nếu cứ nhắm mắt mà phang đại thì chẳng khác gì chó ngáp nhằm ruồi cả."
Tôi đúc kết điểm thắc mắc của 'haothu':
"Vậy thì xét trên căn bản, việc tìm 'footprint' là việc rất cần thiết cho quá trình thậm nhập chớ gì? Đồng ý với nhau điểm này rồi chứ?"
'ccxx' đáp ngay:
"Em thì thấy điều này sáng tỏ như con thỏ vậy. Chỉ có điều em còn hơi ấm ức là vì em muốn 'đào xới' thêm cho ông Khoa thấy là muốn dùng công cụ nào đó đúng mức thì mình phải có kiến thức căn bản cho vấn đề này."
'cuti' tiếp theo:
"Em cũng vậy."
'docco' cũng cho cảm nghĩ và đưa ra vấn đề kế tiếp:
"Chắc chắn là việc tìm 'footprint' là việc cần thiết rồi. Bây giờ em muốn hỏi anh là tìm 'footprint' bao gồm những điểm chính nào. Anh cũng hiểu là em chưa dám đặt bọn em ở vị trí là 'dân chuyên', cũng chẳng muốn đặt bọn em ở vị trí là 'kiddie' nên có lẽ bọn em cần hiểu nguyên tắc tìm 'footprint' nhưng đám 'bán chuyên' vậy :)"
Tôi trả lời, không quên ghẹo 'cuti':
"OK 'ccxx', anh nghĩ em sẽ có dịp thực hiện ý định thôi. Chắc chắn mình sẽ đụng đến chuyện này. Còn 'cuti', em cũng vậy có nghĩa là 'bà tiền hô, ông hậu ủng' hả? ;-)."
Tôi tiếp tục:
"Anh nhớ hồi nãy em có nhận xét là dân 'bán chuyên' thường dựa vào bug-track và trên bug-track thường có ghi rõ hệ điều hành, phiên bản của nó và phiên bản software của dịch vụ. Nếu vậy, theo em nghĩ, xác định 'footprint' là xác định những cái gì một cách cụ thể?"
'docco' liền đáp lời:
"Oài... quá hiển nhiên mà anh? Tất nhiên là mình xác định ba điều chính:
- mục tiêu chạy trên hệ điều hành nào
- phiên bản của hệ điều hành đó
- software tạo dịch vụ là software gì, có phiên bản nào
phải không anh?"
Tôi cười, đáp:
"Đúng rồi. Nhưng... em nên tự tin hơn. Cố gắng đừng kèm thêm đoạn 'phải không anh' làm chi :). Nếu 'không phải' hoặc chưa đầy đủ thì anh sẽ ý kiến liền. Đừng lo.
Rồi, vậy thì mình khai triển ba điều 'docco' đưa ra vậy. Câu hỏi thứ nhất được đặt ra: làm sao xác định được mục tiêu chạy trên hệ điều hành nào?"
'bộ tứ' im lặng, trầm ngâm hồi lâu. Sau đó 'cuti' lên tiếng:
"Em nhớ là em đã có đọc qua vài đoạn về chuyện này nhưng lúc đó em không cho là quan trọng nên không ghi nhận nó. Hình như là 'banner' cái gì gì đó."
'docco' chêm vào:
"À, đúng rồi, 'banner grabbing'. Đây là một cách lấy thông tin mình cần về hệ điều hành và phiên bản của mục tiêu phải không anh?"
Tôi đáp:
"Đúng rồi, đây là một cách dễ nhất, thông dụng nhất và có thể có kết quả cực kỳ chính xác hoặc cực kỳ sai lạc."
'ccxx' ngạc nhiên:
"Sao kỳ vậy anh? làm sao mà vừa có thể chính xác và sai lạc?"
Tôi cắt nghĩa:
"Thông thường banner grabbing như thế này, giả sử mục tiêu có dịch vụ telnet đang lắng nghe, em thử:
Code:
Một tuần lễ trôi qua. Tôi nhận được vài e-mail của bộ tứ cuti, ccxx, docco và haothu với nội dung phần lớn là những thắc mắc về lý do tại sao việc xác định "footprint" của mục tiêu lại quan trọng đến như vậy. Tôi quá bận rộn nên chỉ hồi đáp một cách tổng quát và hẹn lần 'đà khía' kế tiếp sẽ trả lời chi tiết hơn. Tôi cũng không quên nhắc mấy 'trự' nên xem kỹ cơ chế truyền tải thông tin của giao thức TCP vì nó sẽ dẫn đến một bước sâu hơn trong việc tìm "footprint" của mục tiêu. Bộ tứ đề nghị hoãn lại cuộc 'đà khía' thêm một tuần để đủ thời gian chuẩn bị và tất nhiên là tôi đồng ý.
Thêm một tuần lễ trôi qua. Tôi nhận được một offline message của 'cuti' hẹn cuối tuần gặp nhau trên YIM. Tôi đồng ý.
Chiều thứ bảy, lúc 2 giờ trưa tôi vào YIM thì bộ tứ đã có mặt đầy đủ. Trong chốc lát tôi nhận được lời mời tham gia "conference".
'cuti nhanh nhảu:
"Chào anh, anh khoẻ hông? Bọn em lên đây cả tiếng đồng hồ rồi. Đang nói chuyện tầm phào cho vui trong khi chờ anh đó."
Tôi chào bộ tứ:
"Chào mấy đứa. Khoẻ hết chớ? Sao lên sớm vậy? Khoa có chuyện gì mà vắng mặt lâu vậy em?"
'haothu' đáp:
"Dạ em kẹt một số chuyện gia đình nhưng mọi chuyện xong hết rồi. Bây giờ em sẽ tham gia 'đà khía' đều đặn hơn. Em cũng lấy nội dung mấy lần trước để xem hết rồi anh."
'ccxx' đi ngay vào vấn đề:
"Em có gởi mail hỏi anh lý do tại sao việc xác định 'footprint' lại quan trọng như vậy và anh hứa là anh sẽ giải thích chi tiết. Vậy bây giờ anh tiện giải thích không anh?"
'docco' chêm vào:
"Ui, không ngờ bà Như lanh thiệt. Tui chưa kịp hỏi bà đã hỏi rồi. Anh D ơi, em đọc kỹ lại mấy bài anh em mình 'đà khía' thì thấy việc dò tìm và xác định 'footprint' của mục tiêu rất quan trọng. Như anh đã đề cập trước đây muốn khai thác một mục tiêu thì phải nắm rõ mục tiêu. Tuy nhiên, em vẫn chưa hoàn toàn nắm được vấn đề một cách xác thực. Anh nói rõ hơn được không anh?"
Tôi đáp:
"Ừa, việc xác định 'footprint' quan trọng và mất thời gian bởi vì nó quyết định cho sự thành công hay thất bại của việc thâm nhập. Nói trên bình diện bảo mật, che dấu hoặc thay đổi 'footprint' sẽ phần nào đánh lạc hướng hoặc làm chậm kẻ muốn tấn công. Những hệ thống, những máy chủ không có gì bảo vệ thì chẳng có gì đáng nói; chỉ cần một vài thao tác là em đã có thể xác định 'footprint' của nó cho nên việc xác định 'footprint' không còn đáng kể nữa. Tuy nhiên, có những trường hợp admin của hệ thống nào đó cố tình thay đổi 'footprint' của hệ thống để đánh lừa kẻ muốn tấn công thì sự thể hoàn toàn khác."
'haothu' hỏi tiếp:
"Cụ thể như thế nào anh? Em thấy khó hình dung quá :("
Tôi trả lời:
"Ừa, quả thật là hơi khó hình dung nếu em chưa 'kinh qua' những chuyện này. Hãy thử 'đào xới' một tí xem sao? Anh nhớ đã có lần anh đề cập đến chuyện 'các trình độ thâm nhập' rồi phải không?"
'cuti' đáp:
"Dạ, có phải ý anh là chuyện 'dân hacker thứ thiệt' tự thử nghiệm và tìm lỗi để thâm nhập, 'dân hacker bán chuyên' thì dựa vào lỗi đã được công bố trên bug-track và dân 'kiddie' thì chỉ dùng công cụ có sẵn' không vậy?"
Tôi đáp:
"Ừa, đúng vậy. Hãy thử nghĩ xem, trường hợp 'dân hacker thứ thiệt tự thử nghiệm và tìm lỗi', chuyện 'footprint' dính líu gì ở đây?"
'ccxx' đáp:
"Em nghĩ chuyện 'footprint' chẳng còn quan trọng với trường hợp 'hacker thứ thiệt' nữa."
Tôi hỏi tiếp:
"Em giải thích thêm một tí được không?"
'ccxx' đáp:
"Em thấy quá hiển nhiên mà anh? Nếu như 'hacker thứ thiệt' tự nghiên cứu và tìm lỗi thì hẳn nhiên anh ta phải làm việc cụ thể trên một hệ điều hành, trên một môi trường nào đó. Em hình dung là anh ta phải lập một máy chủ có hệ điều hành cụ thể, có phiên bản chương trình cụ thể rồi mới thử nghiệm và tìm lỗi. Cho nên, 'footprint' nằm trong tay anh ta là chuyện hiển nhiên."
Tôi cười, đáp:
"Rồi, cuti, haothu, docco nghĩ sao với nhận định này của 'ccxx'?"
Cả ba im lặng hồi lâu. Sau cùng, 'haothu' lên tiếng:
"Em nghĩ 'ccxx' nói đúng lắm nhưng nó chỉ giới hạn trong trường hợp tay 'hacker thứ thiệt' đó tìm lỗi trên chính máy chủ do mình thiết lập. Còn trường hợp tìm lỗi trên một server nào đó thì sao? Tay 'hacker thứ thiệt' ấy vẫn phải xác định 'footprint' như thường. Không biết em nói có đúng không?"
'docco' lên tiếng:
"Ý em cũng giống như ý thằng Khoa đó anh."
'cuti' góp phần:
"Đúng rồi. Tự thiết lập một máy chủ, cài soft rồi tìm lỗi cụ thể thì chuyện 'footprint' là chuyện không cần thiết vì mình đã thiết lập mọi thứ theo ý. Trường hợp các tay 'hacker thứ thiệt' thử dò tìm lỗi trên các máy chủ không phải do họ làm chủ có xảy ra không anh?"
Lúc này tôi mới lên tiếng:
"Anh tin rằng nhận định của 'ccxx' rất hữu lý. Hầu hết các trường hợp thử nghiệm và tìm lỗi xảy ra trên chính server mà tay 'hacker thứ thiệt' ấy thiết lập. Cho nên, chuyện xác định 'footprint' ở đây không còn là một việc cần thiết nữa. Riêng trường hợp thử nghiệm trên server không phải do mình thiết lập thì anh không thể xác định được vì chẳng có số liệu nào cho chuyện này. Tuy nhiên, anh hình dung rằng trường hợp 'thử trên server mình không làm chủ' vẫn có thể xảy ra nhưng khá ít. Lý do là thử nghiệm và tìm lỗi như thế khá mơ hồ và kém hiệu xuất. Hơn nữa, để thử nghiệm và tìm lỗi một cách đúng mức, em cần phải sử dụng hàng loạt công cụ như debugging, tracing... em phải lặp đi, lặp lại một test case với nhiều biến số khác nhau để tìm kết quả. Những thao tác này nằm trong khuôn khổ 'local', có nghĩa là em phải có quyền sử dụng và thực thi các công cụ ngay trên máy chủ để tìm lỗi."
Tôi dừng lại vài giây và hỏi tiếp:
"Vậy, trường hợp các 'hacker bán chuyên' dựa vào bug-track để thâm nhập thì dính líu gì đến chuyện 'footprint'?"
Lần này 'cuti' nhanh nhảu trả lời:
"Em nghĩ nó 'dính líu' nhiều lắm chứ. Em thấy trên bug-track ghi rõ lỗi trên hệ điều hành nào, cho phiên bản của software nào. Điều này chứng tỏ, nếu tìm cách áp dụng nó để exploit trên một hệ điều hành khác, trên phiên bản software khác thì cơ hội thành công hầu như không có. Bởi vậy, dân 'bán chuyên' phải đi qua chặng đường xác định xem mục tiêu của mình có rơi vào 'phạm vi' con bug đã được công bố hay không thì mới có kết quả khả quan."
Tôi đáp:
"Hay lắm. Mấy đứa còn ý kiến nào khác không?"
'docco' lên tiếng:
"Em nghĩ Hưng nói đúng quá rồi. Chỉ có điều 'dân bán chuyên' xác định 'footprint' ra sao đây?"
Tôi cười, đáp:
"Đó. Bây giờ em đã nhận ra tầm quan trọng của việc xác định 'footprint' chưa? Chuyện 'dân bán chuyên' xác định 'footprint' ra sao thì mình sẽ bàn đến."
'haothu' trả lời:
"Chuyện này thì quá rõ rồi. Nếu không xác định được 'footprint' thì chỉ có nước làm... mò mà thôi."
Tôi đẩy thêm:
"Rồi, mình đã xác định được hai trường hợp. Nếu vậy thì trường hợp các 'kiddie' tìm đâu ra vài món đồ nghề thì dính líu gì đến 'footprint' nhỉ?"
'ccxx' cười xoà:
"Hi hi hi, em nghĩ là anh đang hỏi mẹo cái gì đây rồi. Nếu dựa trên khái niệm thế nào là 'kiddie' mà anh đưa ra trước đây thì mấy tay này có sá gì 'footprint' hay không đâu anh? Vả lại, liệu họ có kiên nhẫn hoặc kiến thức để tìm 'footprint' hoặc quý trọng kết quả mình tìm được ở mức độ thăm dò hay không?"
'docco' phản đối:
"Tui không đồng ý với bà Như điểm này. Hiện nay có quá nhiều công cụ từ thương mại đến mã nguồn mở và những công cụ này rất mạnh, rất dễ dùng và cũng rất nguy hiểm. Nếu 'kiddie' chịu khó một tí thì chuyện gì cũng có thể được cả."
'ccxx' phản đòn:
"Vậy ý ông 'kiddie' đủ khả năng và kinh nghiệm xác định 'footprint' bằng cách dùng công cụ nào đó một cách dễ dàng? Tui không tin như vậy. Cho dù có dùng tool nào đó, dù dễ đến đâu, ông cũng cần có ít nhiều kiến thức trong lãnh vực này trước khi có thể dùng nó một cách hiệu quả. Liệu 'kiddie' có chịu khó đọc hướng dẫn một cách cẩn thận trước khi dùng không? và liệu sau khi lấy được thông tin nào đó, họ có đủ sức đối chiếu với thông tin được công bố hay tìm cách xác định lại thông tin tìm được xem chúng có đáng tin cậy hay không?"
'haothu' xen vào:
"Hì hì, bà Như đánh giá 'kiddie' thấp quá vậy? Bản thân tui thì quả thật tui thấy hơi oải khi phải dùng một công cụ chạy trên dòng lệnh và phải đọc hướng dẫn sử dụng. Loại công cụ này thường có hướng dẫn quá ngắn gọn, đọc xong phải vận dụng, suy nghĩ thì mới dùng được. Tuy vậy, nếu tui mà 'kết' một cái gì thì tui sẵn sàng bỏ công ra để lãnh hội nó thôi."
'cuti' góp chuyện:
"Em cũng thấy Khoa nói đúng đó. Bản thân em cũng bị dính vào cảm giác này."
Tôi hướng câu chuyện về trọng điểm:
"OK, cứ cho là có 'kiddie' có thể dùng các công cụ để xác định 'footprint' một cách không khó khăn, vậy, mình có thể thấy được tầm quan trọng của việc xác định 'footprint' rồi chứ? 'haothu', em thấy sao?"
'haothu' lững lờ:
"Dạ, trên mặt nguyên tắc thì sự thể rõ ràng hơn rồi nhưng cái này chắc phải bắt tay vào làm thì mới đánh giá đúng mức được tầm quan trọng của việc tìm 'footprint' thôi."
Tôi cười, cố gút vấn đề lại:
"OK, em thử hình dung xem, có bao nhiêu phần trăm 'hacker chuyên', bao nhiêu phần trăm 'hacker bán chuyên' và bao nhiêu phần trăm là 'kiddie'?"
'haothu' trả lời:
"Số lượng chính xác thì em không có rồi đó nhưng em nghĩ rằng số 'kiddie' chắc là chiếm đa số, sau đó là đến nhóm 'hacker bán chuyên'. Nhóm 'hacker chuyên' thì có lẽ chỉ chiếm thiểu số mà thôi."
Tôi hỏi tiếp:
"Vậy, em thử hình dung có bao nhiêu phần trăm 'kiddie' sẽ tìm tòi 'footprint' khi vớ phải một công cụ dùng để tấn công nào đó? Có bao nhiêu phần trăm dân 'bán chuyên' phải mó tới chuyện 'footprint'? Và nếu họ (cả 'kiddie' lẫn 'dân bán chuyên') không mó đến chuyện 'footprint' thì tỉ lệ thành công sẽ nằm ở mức nào?"
Không đợi 'haothu' trả lời, 'docco' chen vào:
"Theo em thì tỉ lệ thành công gần như không có. Nếu cứ nhắm mắt mà phang đại thì chẳng khác gì chó ngáp nhằm ruồi cả."
Tôi đúc kết điểm thắc mắc của 'haothu':
"Vậy thì xét trên căn bản, việc tìm 'footprint' là việc rất cần thiết cho quá trình thậm nhập chớ gì? Đồng ý với nhau điểm này rồi chứ?"
'ccxx' đáp ngay:
"Em thì thấy điều này sáng tỏ như con thỏ vậy. Chỉ có điều em còn hơi ấm ức là vì em muốn 'đào xới' thêm cho ông Khoa thấy là muốn dùng công cụ nào đó đúng mức thì mình phải có kiến thức căn bản cho vấn đề này."
'cuti' tiếp theo:
"Em cũng vậy."
'docco' cũng cho cảm nghĩ và đưa ra vấn đề kế tiếp:
"Chắc chắn là việc tìm 'footprint' là việc cần thiết rồi. Bây giờ em muốn hỏi anh là tìm 'footprint' bao gồm những điểm chính nào. Anh cũng hiểu là em chưa dám đặt bọn em ở vị trí là 'dân chuyên', cũng chẳng muốn đặt bọn em ở vị trí là 'kiddie' nên có lẽ bọn em cần hiểu nguyên tắc tìm 'footprint' nhưng đám 'bán chuyên' vậy :)"
Tôi trả lời, không quên ghẹo 'cuti':
"OK 'ccxx', anh nghĩ em sẽ có dịp thực hiện ý định thôi. Chắc chắn mình sẽ đụng đến chuyện này. Còn 'cuti', em cũng vậy có nghĩa là 'bà tiền hô, ông hậu ủng' hả? ;-)."
Tôi tiếp tục:
"Anh nhớ hồi nãy em có nhận xét là dân 'bán chuyên' thường dựa vào bug-track và trên bug-track thường có ghi rõ hệ điều hành, phiên bản của nó và phiên bản software của dịch vụ. Nếu vậy, theo em nghĩ, xác định 'footprint' là xác định những cái gì một cách cụ thể?"
'docco' liền đáp lời:
"Oài... quá hiển nhiên mà anh? Tất nhiên là mình xác định ba điều chính:
- mục tiêu chạy trên hệ điều hành nào
- phiên bản của hệ điều hành đó
- software tạo dịch vụ là software gì, có phiên bản nào
phải không anh?"
Tôi cười, đáp:
"Đúng rồi. Nhưng... em nên tự tin hơn. Cố gắng đừng kèm thêm đoạn 'phải không anh' làm chi :). Nếu 'không phải' hoặc chưa đầy đủ thì anh sẽ ý kiến liền. Đừng lo.
Rồi, vậy thì mình khai triển ba điều 'docco' đưa ra vậy. Câu hỏi thứ nhất được đặt ra: làm sao xác định được mục tiêu chạy trên hệ điều hành nào?"
'bộ tứ' im lặng, trầm ngâm hồi lâu. Sau đó 'cuti' lên tiếng:
"Em nhớ là em đã có đọc qua vài đoạn về chuyện này nhưng lúc đó em không cho là quan trọng nên không ghi nhận nó. Hình như là 'banner' cái gì gì đó."
'docco' chêm vào:
"À, đúng rồi, 'banner grabbing'. Đây là một cách lấy thông tin mình cần về hệ điều hành và phiên bản của mục tiêu phải không anh?"
Tôi đáp:
"Đúng rồi, đây là một cách dễ nhất, thông dụng nhất và có thể có kết quả cực kỳ chính xác hoặc cực kỳ sai lạc."
'ccxx' ngạc nhiên:
"Sao kỳ vậy anh? làm sao mà vừa có thể chính xác và sai lạc?"
Tôi cắt nghĩa:
"Thông thường banner grabbing như thế này, giả sử mục tiêu có dịch vụ telnet đang lắng nghe, em thử:
Code:
$ telnet myhost.mydomain.com
Red Hat Linux release 9 (Shrike) myhost.mydomain.com
myhost login:
cho mình thấy ngay mục tiêu đang chạy trên RedHat và phiên bản là 9.0. Thông tin này có thể hoàn toàn chính xác nếu như admin của server này hoàn toàn không thay đổi, che dấu footprint của hệ thống. Nếu vậy thì thông tin cần biết đã có một cách dễ dàng. Tuy nhiên, làm sao xác định được thông tin này xác thực? Nếu mục tiêu không mở dịch vụ telnet thì có thể làm gì khác để xác định thông tin này?"
'haothu' không trực tiếp trả lời câu hỏi của tôi mà lại hỏi tiếp một câu khác:
"Ủa, sao anh không cho thông số giá trị cổng dịch vụ ở trên vậy? Em thấy thường thường lệnh telnet đi theo thông số địa chỉ và cổng mà?"
Tôi đáp:
"À, nhiều người bối rối chi tiết rất nhỏ này. Khi em dùng lệnh telnet và chỉ có thông số thứ nhất là địa chỉ nhưng không kèm theo thông số thứ hai là cổng thì telnet dùng cổng (đích) mặc định là 23 (cổng telnet). Nói một cách khác, nếu em không cung cấp giá trị cổng thì telnet client (chương trình telnet em dùng trên command prompt là telnet client) sẽ tự động truy cập đến địa chỉ đã cho ở cổng 23. Nếu em cung cấp địa chỉ và cổng thì telnet client sẽ truy cập đến địa chỉ ấy ở cổng được ấn định. Ví dụ, em gõ
Code:
$ telnet www.mysite.com 80
thì telnet client sẽ truy cập đến địa chỉ là www.mysite.com ở cổng 80. Rõ rồi chứ?"
'haothu' ậm ừ:
"Dạ... nhưng... ùm... mỗi lần em dùng telnet trên windows để telnet đến cổng nào đó, sau em chẳng thấy có chữ gì hết, chỉ có cái command prompt đen ngòm vậy anh? Hay em làm gì sai?"
Tôi đáp, hơi thiếu kiên nhẫn:
"À, mấy cái này là do telnet trên Windows không có 'echo' đó thôi. Nếu em gõ Run/cmd rồi trên dos-prompt này em mới gõ telnet thì Windows sẽ dùng telnet client bên trong command window (DOS-console) và em không set 'echo' được cho nên nó... đen ngòm. Nếu em thử gõ Run/C:\Winnt\system32\telnet.exe thì Windows sẽ tạo một process riêng biệt cho telnet client và nó ở trong tình trạng tạm gọi là "full mode", lúc ấy em có thể set 'echo' được. Trong chế độ này, em có thể set biến LOCAL_ECHO và nó sẽ hiện ra chữ mỗi khi em gõ thôi. Mấy cái này có trong phần "help" của Windows cả. Em chịu khó tìm hiểu chi tiết chớ mình mà đào sâu mấy thứ này thì đi xa trọng tâm đó em."
'haothu' trả lời:
"Dạ. Chắc do em chưa mày mò đúng mức thôi."
'cuti' chen vào:
"Mấy cái này đúng nghĩa là 'hiểu rõ', 'hiểu ngọn ngành' đây. Ui... biết chừng nào mới 'ngọn ngành' mọi thứ đây trời?"
Tôi tiếp tục:
"Thằng này cứ than với thở. Từ từ thì sẽ ngọn ngành thôi em. Em phải đụng đến nó, phải chịu khó thì mới nắm được nhiều. Thôi mình tiếp tục chuyện hồi nãy đi hả?"
'docco' hỏi ngay:
"Vậy nếu mục tiêu ấy không có dịch vụ telnet thì mình telnet vào một dịch vụ khác phải không anh?"
Tôi cười, đáp:
"Đúng rồi. Nhưng lý do tại sao mình telnet vào một dịch vụ khác?"
'docco' trả lời:
"Hình như dịch vụ nào cũng có cái 'banner' hết phải không anh? Nếu vậy, khi mình telnet vào dịch vụ, có nghĩa là mình muốn kết nối với dịch vụ ấy thì nó thường 'chào' mình bằng một biểu ngữ?"
Tôi đáp:
"Đúng lắm. Hình như em có ngâm cứu qua mấy cái này rồi phải không Duy?"
'docco' đáp:
"Hì hì, đúng là không qua mặt anh nổi. Đúng là em có 'ngâm' qua vài thông tin về chuyện 'footprint' đó anh vì lần trước mình có bàn qua về chuyện này. Em nghĩ chắc nó phải quan trọng nên anh mới khai triển nó, cho nên em đọc thêm để nắm thêm thông tin."
Rất hài lòng với sự chuyên tâm của docco, tôi đáp:
"Hay lắm. Nếu em chuyên tâm như vậy thì em sẽ nắm được chìa khoá của vấn đề một cách nhanh chóng đó Duy :)"
'docco' lúng túng:
"Dạ... ùm... à.... em chỉ cố quan sát và rút kinh nghiệm từ những lần mấy anh em mình 'đà khía' thôi anh. Em rút ra một điều là anh luôn luôn có dụng ý gì đó khi đưa ra một vấn đề cho nên lần này em lo 'rào' trước, hì hì."
'cuti' xen vào:
"Em cũng ráng 'rào' nhưng hình nhưng em chưa vững tâm bằng thằng Duy. Em vẫn chưa có thể xác định là tự nên làm cái gì tiếp."
'haothu' trêu 'cuti':
"Tao thấy mày nên lấy vợ là chuyện tiếp theo mày nên làm... tiếp ;-)"
Tôi thầm nghĩ, mấy ông tướng này làm sao tránh khỏi chit chat. Vậy cũng vui nhưng phải 'điều tác' một tí không thì sa đà, mất thời gian. Tôi bèn lên tiếng:
"Ừa, nó mà lấy vợ thì chắc khỏi thấy mặt nó luôn. Thôi, mình 'khoá' cái vấn đề đang lở dỡ kia rồi anh phải dọt á."
'ccxx' lên tiếng:
"Dạ... cám ơn anh cứu bồ, chớ hông thì mấy ổng chọc đến mai cũng không chịu ngưng đâu :(. Em muốn hỏi anh là nếu mấy ông admin biết trước chuyện những tay thâm nhập cố tìm thông tin từ banner để tìm cách tấn công, họ tháo hết mấy cái banner đi thì lấy đâu mà thăm dò hả anh? Em thì không rõ họ tháo mấy cái banner bằng cách nào nhưng em hình dung là nếu gắn lên được thì phải tháo xuống được."
Tôi cười, đáp:
"Ái chà, con bé nói chuyện phòng thủ hả? Đúng là bản năng tự nhiên của phụ nữ ;-). Em đưa ra một điểm hết sức lý thú. Đúng rồi, ngày nay các admin có quan tâm đến bảo mật đều thực hiện việc 'dấu' banner để giảm thiểu thông tin về máy bị tiết lộ. Có nhiều admin còn cực đoan hơn nữa là họ chẳng những dấu mà còn cố tình thay đổi từ A thành B để đánh lừa những kẻ thăm dò nữa."
'cuti' xen vào:
"Nhưng mà khoan, cho em hỏi một chi tiết này một tí anh? Hình như mình chỉ thấy được cái banner của một dịch vụ khi mình cố tình truy cập nó ở mức độ thấp hơn phải không anh? Ví dụ em dùng Outlook Express để gởi và nhận mail thì làm sao mình thấy được mấy cái banner kia?"
Tôi đáp:
"Em thắc mắc một điểm rất có lý. Thật ra mail client như Outlook Express 'thấy' hết những cái banner nhưng nó thường 'dấu'. Ngoại trừ em muốn xem cái 'header' của nó. Em thử tìm tòi xem trong mấy cái 'header' của smtp mà mail client nhận được, nó có chút ít 'footprint' không? :). Những dịch vụ khác như ftp, khi em dùng ftp client để truy cập ftp server, nếu ftp server này không dấu banner thì em sẽ thấy ngay cái banner trong lúc truy cập. Dịch vụ http thì lại khác, em không thấy mấy cái banner bởi các trình duyệt ứng dụng để 'hiển thị' những thông tin mà người dùng bình thường cần xem mà thôi. Tuy nhiên, nếu em truy cập http service ở dạng 'raw' (như đi qua telnet) thì em có thể thấy rất nhiều thông tin nếu như server này không dấu banner.
Nên nhớ một điều là không phải banner nào cũng chứa đựng thông tin về hệ điều hành và phiên bản của nó. Thông thường nó chỉ chứa tên software tạo dịch vụ (mình telnet vào) và phiên bản của nó. Tuy vậy mình cũng có thể phần nào đoán được hệ điều hành dựa trên thông tin này."
'cuti' đáp một cách thoả mãn:
"À, vậy thì tùy dịch vụ mà tìm banner phải không anh? Nhưng hình như cách dùng telnet là chắc ăn nhất. Nhưng mà em thấy chi tiết 'có thể phần nào đoán được hệ điều hành' có vẻ không được chắc ăn vậy anh?"
Tôi đáp:
"Ừa, nếu như banner đó là banner thứ thiệt, không hề bị thay đổi. Còn chuyện chắc ăn thì chẳng có gì mà chắc ăn đâu em. Mỗi người có thể tìm kết quả mỗi khác trong quá trình thăm dò bởi vì có quá nhiều thông tin và tùy vào đương sự mà phân tích, chọn lọc thông tin nào logic nhất, đáng tin cậy nhất. Nên nhớ rằng thăm dò không phải là 'hack' nha em. 'Thăm dò' là 'thăm dò', là một quá trình tìm tòi, phân tích những dữ kiện có thể lấy được dựa vào những công cụ, phương tiện cho phép.
Quay lại nhận định của 'ccxx' một tí cho trót hả? Em nghĩ thế nào khi em thử telnet vào một server và nó cho em thông tin như sau:
Code:
$ telnet www.mydomain.com 80
Trying
www.mydomain.com...
Connected to www.mydomain.com.
Escape character
is '^]'.
HEAD /somefile.txt HTTP/1.0
HTTP/1.1 404 Not Found
Date: Thu, 25 Apr 2004 14:29:46 GMT
Server: Microsoft-IIS/5.0
Connection: close
Content-Type: text/html; charset=iso-8859-1
Connection closed by foreign host.
"
'ccxx' ngẫm nghĩ rồi trả lời:
"Dạ thông tin ở đây cho thấy server là một con IIS 5.0, em tin chắc đây là một web server chạy trên hệ điều hành Windows 2000."
Tôi khơi mào:
"Còn mấy đứa có ý kiến gì khác không vậy?"
Ba trự kia im lặng khá lâu. Sau đó 'cuti' rụt rè lên tiếng:
"Èm... à.... em nghĩ có cái gì tàng ẩn ở đây hay sao đó. Em cũng nghĩ cái này là một con IIS 5.0, mà đã là IIS 5.0 thì nó chạy trên Windows 2000. Không biết có cái gì ẩn khuất ở đây không nhỉ?"
'docco' cũng lên tiếng:
"Hì hì, thằng Hưng cũng bắt đầu có bịnh hoài nghi rồi. Em cũng nghĩ như Hưng vậy. Tuy nhiên, tự nhiên em cũng hơi hoài nghi vì nếu nó đơn giản và rõ ràng như thế thì anh đưa nó ra làm chi?"
'haothu' cũng tham gia:
"Chắc chắn là Windows 2000 rồi. Thông tin rõ mười mươi thế kia mà."
Tôi không trả lời mà đưa ra thêm một ví dụ khác:
"Được rồi, để anh đưa ra thêm một ví dụ khác để tụi em tìm xem có gì đặc biệt không hả? Đây:
Code:
'ccxx' ngẫm nghĩ rồi trả lời:
"Dạ thông tin ở đây cho thấy server là một con IIS 5.0, em tin chắc đây là một web server chạy trên hệ điều hành Windows 2000."
Tôi khơi mào:
"Còn mấy đứa có ý kiến gì khác không vậy?"
Ba trự kia im lặng khá lâu. Sau đó 'cuti' rụt rè lên tiếng:
"Èm... à.... em nghĩ có cái gì tàng ẩn ở đây hay sao đó. Em cũng nghĩ cái này là một con IIS 5.0, mà đã là IIS 5.0 thì nó chạy trên Windows 2000. Không biết có cái gì ẩn khuất ở đây không nhỉ?"
'docco' cũng lên tiếng:
"Hì hì, thằng Hưng cũng bắt đầu có bịnh hoài nghi rồi. Em cũng nghĩ như Hưng vậy. Tuy nhiên, tự nhiên em cũng hơi hoài nghi vì nếu nó đơn giản và rõ ràng như thế thì anh đưa nó ra làm chi?"
'haothu' cũng tham gia:
"Chắc chắn là Windows 2000 rồi. Thông tin rõ mười mươi thế kia mà."
Tôi không trả lời mà đưa ra thêm một ví dụ khác:
"Được rồi, để anh đưa ra thêm một ví dụ khác để tụi em tìm xem có gì đặc biệt không hả? Đây:
Code:
$ telnet www2.mydomain.com 80
Trying
www2.mydomain.com...
Connected to www2.mydomain.com.
Escape character
is '^]'.
HEAD /somefile.txt HTTP/1.0
HTTP/1.1 404 Object Not Found
Server: Microsoft-IIS/5.0
Date: Thu, 25 Apr 2004 14:35:23 GMT
Content-Length: 460
Content-Type: text/html
Connection closed by foreign host.
"
Bộ bốn hoàn toàn im lặng nhiều phút đồng hồ. Hồi lâu, 'docco' lên tiếng:
"Em thấy rõ cái thứ nhì khác cái thứ nhất một chút là cái thứ nhì có thêm Content-Length và Content-Type thì hơi khác một chút vì không có đoạn 'charset=iso-8859-1'. Tại sao chúng lại khác nhau ở mấy điểm này? Chắc chắn chúng là 2 server riêng biệt vì một cái là www.mydomain.com, cái kia là www2.mydomain.com. Em chỉ không hiểu được lý do tại sao chúng khác nhau mặc dù cả hai đều là IIS 5.0."
'ccxx' nhận định:
"Hay là một trong hai server trên có banner giả? Dám lắm đó. Anh đang khai triển việc thay đổi banner phải không nào? Vậy chắc chuyện này có thể lắm."
'cuti' và 'haothu' cùng cảm thán:
"Ái chà."
"Đúng rồi."
Tôi cười, thong thả đáp
"Bé Như nhà mình tinh tế lắm. Rõ ràng là mình đang khai thác chuyện thay đổi banner mà. Quả thật một trong hai server trên giả dạng banner đó. Nếu vậy làm sao mình xác định được cái nào thiệt, cái nào giả?"
'docco' xuýt xoa:
"Ái chà, thật là lý thú. Em không ngờ đào xới mấy cái HTTP header ở tầng này lại có những điều lý thú đến như vậy. Làm sao mình xác định được cái nào thiệt, cái nào giả bây giờ anh?"
Tôi đáp:
"Hì hì, anh hỏi em, em hỏi lại anh? Cái này để em suy nghĩ trước cái đã. Anh trả lời liền thì mất hay đi. Em tìm cách thử một cái xem nào?"
'ccxx' thốt lên:
"A... có rồi, có rồi. Trường mình có một con server chạy Windows 2000 và IIS 5. Cứ thử telnet vào nó và chạy y hệt dòng HEAD như trên ví dụ thì sẽ biết ngay thôi."
'cuti', 'haothu', 'docco' đồng cảm thán:
"Đúng rồi."
"Ờ hớ."
"Sao mình không nghĩ ra nhỉ? Đúng là đàn bà, con gái tinh tế mấy chuyện này."
Sau vài phút, 'cuti' lên tiếng trước. Quả thật mấy ông đực rựa nhanh nhảu hơn trong chuyện 'động tay, động chân' nhưng lại chậm hơn mấy cô khoản 'nhận xét tinh tế'
"Thằng thứ nhì đúng là thằng IIS 5.0"
Tiếp theo đó là 'docco', 'haothu' và 'ccxx' đồng xác nhận:
"Đúng rồi, chắc chắn server thứ nhì chạy con IIS 5.0 thứ thiệt."
"Hết đường thoát."
"Em đã nói thế."
và nhiều câu trao đổi khác.
Cái YIM 'conference' bé nhỏ trở nên rộn rã bằng những câu cảm thán. Tôi hiểu sự rộn rã này không phải tính quan trọng hay mới mẻ của những điều bộ bốn tìm thấy mà ở chỗ chính ở chỗ bộ bốn nhúng tay vào việc quan sát, phân tích, thao tác, so sánh và đúc kết ra được. Tôi lên tiếng:
"Trong hai ví dụ trên, còn có chi tiết nào khác nhau giữa hai server? Chi tiết này hết sức đặc biệt. Bọn em xem thử?"
Như tôi dự phỏng, chính 'ccxx' lại tìm ra điểm khác biệt trước tiên trong bộ bốn. 'ccxx' đáp:
"Em tìm ra rồi. Cái khác nhau là 'HTTP/1.1 404 Not Found' và 'HTTP/1.1 404 Object Not Found' phải không anh? Server thứ nhất chỉ thông báo là 'không tìm thấy' còn con IIS thì lại thêm chữ 'object' vào trong thông điệp."
'haothu' đáp, vẻ tiếc rẻ:
"Công nhận bà Như lanh thiệt. Tui cũng vừa tìm ra, chưa kịp nói thì bà đã làm xong rồi."
Tôi hỏi tiếp:
"Vậy bọn em nghĩ điểm khác nhau mà Như đưa ra có gì quan trọng?"
'cuti' láu táu lên tiếng:
"Em thấy điểm khác biệt này chẳng ích lợi gì cả. Mấy ông Microsoft hay có thói làm cho khác người vậy thôi à."
'ccxx' nguýt 'cuti':
"Hứ... cũng là chứng nào tật nấy. Chưa suy nghĩ cho kỹ đã đôm đốp nữa rồi. Trong khuôn khổ 'nhận diện', điểm khác biệt kia hẳn phải có một giá trị nào đó chớ?"
'cuti' lúng búng với 'ccxx':
"Èm... thì anh có nói gì đâu à."
Tôi can gián ngay:
"Thôi thôi. 'ccxx' nhận định vậy là chính xác. Điểm khác biệt ở đây giúp chúng ta dễ dàng nhận ra đâu là IIS thật, đâu là IIS giả mạo. Trên *nix, apache thường được dùng làm web service nhất. Những ai rành rõi với chuyện biên dịch thường tải mã nguồn của apache về và sửa lại thông tin của banner trong nguồn. Gần đây, những ai dùng apache còn có thêm mod_security cho phép 'giả' banner nữa. Tuy vậy, có dấu banner vẫn không dấu được những đặc điểm khác. Với ví dụ thứ nhất, mình biết ngay đây là banner 'giả mạo'. Chuyện xác định banner thật của nó là gì là chuyện khác nữa nhưng trước mắt mình có thể xác định phần nào đó hệ điều hành đang chạy web server đó không hẳn là Windows 2000. Điều tiếp theo là phải xác định rõ hơn nếu muốn tiếp tục thăm dò."
'haothu' hỏi:
"Nếu vậy em thấy chuyện giả mạo banner để dấu danh tánh đâu có ích lợi gì cho lắm đâu anh?"
Tôi cười, hỏi sang 'docco', 'cuti' và 'ccxx':
"Bọn em nghĩ sao về nhận định của 'haothu'?"
'docco' trả lời trước:
"Em thấy trước tiên nó đánh lừa được mấy ông kiddie. Đây cũng là chuyện ích lợi."
'cuti' ngần ngừ:
"Em.... em thì thấy nó có lợi khá nhiều. Ngoài chuyện đánh lừa kiddie, nó có thể đánh lừa được cả đống công cụ dùng để tự động thăm dò hông chừng. Em thấy có khá nhiều công cụ dành riêng cho công tác này, cả thương mại lẫn mã nguồn mở. Ví dụ chương trình tự động kia 'nhìn' thấy dịch vụ là IIS thì nó chỉ dùng các lỗi của IIS có trong database của nó mà... nện. Mà nện thế này thì trật lất hết vì thật sự dịch vụ này đâu phải là IIS. Em thấy đây cũng là một điểm hay."
'ccxx' phát biểu:
"Em thấy tùy mức độ kinh nghiệm của kẻ thăm dò. Nếu thăm dò kiểu như anh nói ở đây thì có ma nào mà dấu nổi. Tuy nhiên, em nghĩ là 'cuti' rất có lý với ý kiến dùng nó để lừa các công cụ tự động."
Tôi đáp:
"Hay lắm, ráng 'động não' đều đều hả :). Quả thật, dùng phương pháp thay đổi banner chỉ có thể đánh lừa những người chưa đủ kinh nghiệm và một số tools tự động hoá chưa đủ tinh vi. Tuy vậy, đánh lừa được nhóm 'thăm dò' ở dạng hoàn toàn phó mặc vào công cụ cũng đã là đáng kể vì nhóm này chiếm đa số. Vậy, trên phương diện phòng thủ, liệu mình có nên ứng dụng phương cách 'giả' banner không?"
'cuti' đáp:
"Em nghĩ là nên. Lừa được chút nào hay chút đó chớ anh? :)"
'docco' lên tiếng:
"Em nghĩ cũng nên làm nhưng nếu nó không thật sự tác dụng thì không nên quá tốn công sức với nó."
Tôi đáp:
"Đúng rồi. Nếu có thể 'giả' để giảm thiểu những màn thăm dò chung chung thì tại sao không làm? Em nên biết, chỉ có chừng dưới 10% các cú rà tự động được tiếp tục bằng quá trình 'rà' bằng tay để xác định thêm thông tin mục tiêu. Thông thường, quá trình rà tự động chỉ để thu thập một số mục tiêu có thông tin cụ thể mà kẻ thâm nhập muốn tìm. Tuy nhiên, đối với kẻ có quyết tâm thăm dò một mục tiêu cụ thể nào đó thì chuyện 'giả' có lẽ không tác dụng gì mấy.
Bọn em có nghe đến khái niệm security through obscurity chưa?"
'docco' đáp:
"Em có thấy nhắc đến nhiều nơi nhưng em không đào sâu lắm vì không rõ tác dụng của nó. Nó là gì vậy anh?"
Tôi nói tiếp:
"Ừa, security through obscurity dịch nôm na ra tiếng Việt là bảo mật bằng tính bất khả định. Hay nói một cách khác, vì mục tiêu không được rõ ràng nên nó có vẻ bảo mật hơn. Có hẳn một trường phái rất chuộng security through obscurity nhưng bản thân anh thì anh không chuộng bởi vì nó thuộc về cái vỏ bên ngoài mà thôi. Đối với những ai thật sự muốn thâm nhập thì cái 'vỏ' này mỏng manh lắm. Nếu có thời gian và điều kiện thì thêm cái vỏ này cũng tốt nhưng nếu chỉ phó mặc vào nó để 'bảo mật' thì rất phiến diện."
'cuti' thắc mắc:
"Họ làm sao gọi là 'chuộng' vậy anh?"
Tôi đáp:
"À, 'chuộng' ở đây là họ dành nhiều thời gian, công sức để tạo một lớp vỏ 'giả' để đánh lừa kẻ tấn công. Có thể lớp vỏ này làm chậm bước thâm nhập vì kẻ muốn tấn công vì họ mất thời gian xác định thật tính của mục tiêu. Tuy vậy, thiếu bảo mật từ bên trong ra, thiếu bảo mật thật sự thì lớp vỏ này tan vỡ nhanh chóng."
'cuti' hỏi tiếp:
"Em nghĩ là chuyện giả một cái banner đâu có mất thời gian đâu anh?"
Tôi đáp:
"Ừa, đối với mã nguồn mở thì đây là chuyện không mất thời gian cho lắm. Tuy vậy, ít nhất em phải cần thời gian để biên dịch lại software. Đối với software thương mại thì đây là chuyện hoàn toàn khác. Nó dính đến chuyện bản quyền, chuyện giới hạn thay đổi software nên rất phiền phức. Trên mức độ banner thì thế, nhưng chuyện 'đánh lừa' còn đi sâu xuống tcp/ip stack nữa. Họ 'chuộng' phương pháp này đến độ tìm cách thay đổi tcp/ip stack để dấu những đặc tính của các gói tin đi ra / đi vào từ các cổng dịch vụ bởi vì các gói tin này mang những đặc điểm có thể dùng để xác định 'footprint' nữa.
Nếu em chỉ quản lý một vài máy chủ thì có lẽ không quá phiền phức nhưng nếu em phải quản lý cả một hệ thống chằng chịt có nhiều máy chủ, nhiều thiết bị thì sự thể rất khác. Ngay cả em chỉ quản lý một vài máy chủ mà không cẩn thận, tỉ mỉ thì cũng vô ích bởi vì em có thể 'dấu' đầu này nhưng để lộ đầu kia thì cũng chẳng phục vụ được ý định 'dấu'."
'cuti' cảm thán:
"Chà... chuyện phức tạp vậy sao anh? Hoá ra bảo mật cũng có năm bảy đường. Em thấy chuyện 'giả' này có vẻ thú vị lắm."
'docco' xen vào:
"Cho em hỏi một chi tiết nha anh? Anh nói là trên *nix người ta thường thay đổi source của apache hay dùng mod_security để giả banner. Vậy trên Windows và dùng IIS thì có phương cách nào tương tự không anh? Em nghĩ IIS thì không thể điều chỉnh mã nguồn rồi đó."
Tôi cười, đáp:
"Chà chà, bộ em cũng muốn theo trường phái 'security through obscurity' sao? :). Trên Windows thì có một số soft. Anh không nhớ chính xác vì anh không 'chuộng' mấy cái này nhưng anh biết Windows có một cái gọi là urlscan. Nó làm việc trên tầng ISAPI của dịch vụ web của IIS và cho phép em 'giả' banner đó. Nếu thích thì vào site của Microsoft mà tham khảo thêm. Anh nghĩ em có thể táy máy đến mấy các dll của inetsrv của Windows để đổi banner nhưng chắc sẽ mất thời gian. Hơn nữa, đã dấu thì dấu cho trót, phải đổi hết trọn bộ error pages của IIS không thì banner một nơi mà error pages một nẻo."
'haothu' thắc mắc:
"Anh vừa nói chuyện thay đổi tcp/ip stack để che dấu 'footprint', em thấy cái này lạ ghê. Anh nói rõ hơn một tí được không anh?"
Tôi đáp:
"Ừa, đó cũng là một trong những lý do anh đề nghị bọn em đọc kỹ về tcp/ip lần trước để dễ hình dung hơn đó nhưng mấy anh em mình sa đà ở mức banner nên chưa đề cập đến level này. Chắc chắn mình sẽ đụng đến khoảng đó thôi. Em an tâm."
Tôi tiếp tục phần đang khai triển ở trên:
"OK, nếu mình biết 'thằng' thứ nhất ở trên là giả mạo, làm sao mình xác định được danh tánh thật sự của nó là gì?"
Bộ bốn lại im lặng. Sau vài phút, 'docco' lên tiếng:
"Ái chà, cái này mới vui á. Em mghĩ chẳng dễ tí nào."
'haothu' nhận định:
"Em nghĩ chắc phải dùng phương pháp so sánh như kiểu mình so sánh với một IIS server như hồi nãy thôi anh. Anh thấy chuyện này khả thi không?"
Tôi đáp:
"Khả thi chớ sao không em? Em nên nhớ rằng, bước thăm dò bằng tay tuy chậm nhưng nó luôn luôn cho em kết quả xác thực hơn bước thăm dò tự động bằng công cụ nào đó. Vậy, để so sánh thì mình cần có cái gì?"
'haothu' trả lời:
"Nhất định là mình phải có các bản mẫu 'xịn' rồi cứ dùng cái mình đang thăm dò mà so sánh với bản 'xịn' là xong."
Tôi khơi mào:
"Vậy mình cần phải thu thập hết các bản mẫu 'xịn' :). Cái này còn gọi là 'footprint database'. Tùy mỗi người có cách lưu trữ và so sánh nhưng điểm cốt lõi là: dù có 'rà' bằng tay hay 'rà' tự động, em phải có một số thông tin mẫu nào đó để làm chuẩn. Nếu không, em không thể so sánh cái mình thấy (từ việc thăm dò) với một cái gì khác cả."
'haothu' hỏi tiếp:
"Vậy mình phải 'thăm dò' hết các loại web server để lấy 'footprint' thứ thiệt để dành hay sao anh? Cực quá vậy? Có database nào có sẵn mấy cái này không anh?"
Tôi đáp:
"Anh nghĩ là có nhưng chưa thấy phổ biến ở bên ngoài như một database bình thường mà nó thuộc một công cụ thăm dò ở dạng mình đang bàn. Bởi vậy, ngay từ đầu anh đã nói: muốn thâm nhập một cách đúng nghĩa, em phải rất kiên nhẫn, phải có căn cơ và phải hiểu mục tiêu của mình là vậy đó."
Tôi nói tiếp:
"Ở đây anh muốn nói đến phương hướng tiếp cận vấn đề chớ không phải cách giải quyết cụ thể cho từng trường hợp, từng khúc mắc. Hướng tiếp cận ở đây là: tìm và thu thập các 'footprint' của các web server để làm tư liệu cho việc so sánh về sau. Còn chuyện giải quyết thế nào thì mình đã bàn qua phần nguyên tắc. Anh chỉ 'khơi mào' cho em để khởi động còn muốn chạy xa, chạy nhanh thì tuỳ ở em :).
Với hai ví dụ trên, anh còn muốn nhắc đến một điểm khác rất quan trọng. Bọn em thử copy và paste chúng vào hai cột cạnh nhau để dễ so sánh, dùng soft nào cũng được, cách nào cũng được, miễn sao có thể đặt chúng bên cạnh nhau để so sánh. Chắc chắn em sẽ tìm ra thêm điểm khác nhau nữa."
Vài phút trôi qua, 'ccxx' lại lên tiếng trước tiên:
"Em thấy rồi. Vị trí thứ tự của các HTTP header khác nhau phải không anh?"
Tôi đáp:
"Chính xác. Chúng khác nhau đó. Trước đây anh cũng thắc mắc chuyện này nhưng sau khi xem mấy các RFC cho HTTP thì mới thấy là chẳng có áp đặt cụ thể nào về thứ tự trình bày của các HTTP header cả. Bởi thế, mỗi nơi implement mỗi khác và đây là một điểm đặc thù giúp mình phân tích và phân biệt 'footprint' nữa."
'cuti' thắc mắc:
"Sao anh biết được những chi tiết tinh vi và khó thấy như thế vậy anh? Có tài liệu nào đó hướng dẫn mấy chuyện này không anh?"
'docco' cũng lên tiếng:
"Dạ, em cũng thắc mắc như thằng Duy vậy. Em chưa hề thấy ở đâu nói đến những chi tiết lý thú như thế này về chuyện nhận diện 'footprint'."
Tôi đáp:
"Có thể có những tài liệu phân tích những chuyện này. Anh không chắc vì anh chưa hề đọc được cái nào cả. Để trả lời thắc mắc của 'cuti', anh vô tình tìm ra những khác biệt đó trong khi 'táy máy' và test một web application viết bằng java. Application này được deploy trên cả Windows lẫn Unix nhưng có web-tier khác nhau. Trên Windows thì dùng IIS và trên *nix thì dùng Apache và iPlanet (của Sun). Anh phải bắt lấy hết các header của từng loại web server để tạo bộ luật mapping cho cái reverse proxy nên mới thấy được những cái khác nhau kia. Kinh nghiệm xương máu đó! :)"
'haothu' rên rỉ:
"Ôi trời, anh 'Việt-hóa' đoạn trên dùm em được không anh? cái gì mà 'web-tier', rồi đến 'deploy', 'mapping', rồi 'reverse proxy'... Em đọc thấy muốn... tẩu hoả luôn :("
Tôi cười, đáp:
"Ái chà... anh cũng chẳng biết phải dịch ra sao nữa. Nếu em có đụng chạm đến các ứng dụng web hạng... nặng thì hẳn sẽ biết được khái niệm 'mutlti-tier' application. Cái này có nghĩa là một ứng dụng có nhiều tầng như: tầng web, tầng logic, tầng dữ liệu (database). Còn chữ 'deploy' thì có nghĩa đại loại như cài đặt, thiết lập một chương trình mới trên một máy chủ. 'deploy' mang nghĩa rộng hơn 'install' (là cài đặt). Riêng 'mapping' thì anh không biết phải dịch ra sao. Nó có nghĩa nhưng là so sánh, biên dịch 2 phía thông tin. Ví dụ, phía A có thông tin là 1 có thể được 'map' thành Z ở phía B chẳng hạn. Chữ 'reverse proxy' có nghĩa là 'proxy ngược'. Người dùng trong LAN muốn truy cập Internet thì đi xuyên qua 'forward proxy', còn người dùng từ Internet muốn vào web server của em thì đi qua 'reverse proxy'. Những khái niệm này khá dễ hiểu, em chịu khó tham khảo thêm trên net."
'cuti' nhận xét:
"Ra vậy. Có quá nhiều kiến thức đi ra từ kinh nghiệm bản thân, trong môi trường làm việc thật sự chớ chẳng phải cái gì cũng có trong sách."
Tôi đáp:
"Đúng thế. Anh đã có lần đề cập trước đây, sách là nguồn thông tin tổng quát. Nó giúp em hình thành một cái 'sườn' của vấn đề. Tùy vào em mà hình thành cái 'ruột'. Những điều mấy anh em mình 'đà khía' ở đây có rất nhiều điều đi từ 'kinh nghiệm xương máu' mà có. Anh biết có những cái lạ lẫm, khó hình dung bởi vì em chưa gặp qua. Tuy nhiên, đến một lúc em đụng phải điều gì đó mình đã bàn ở đây thì tự nhiên sự việc sẽ sáng tỏ, dễ dàng thôi."
'cuti' thắc mắc:
"Vậy anh muốn bọn em đi thu thập mấy cái header 'xịn' để làm tư liệu hả anh?"
Tôi đáp:
"Tùy em thôi. Nếu em thấy thích thú chuyện này thì em có thể dành thời gian để đào xới chúng. Anh dám chắc em sẽ thu thập được nhiều điều lý thú. Tuy nhiên, điểm cốt lõi anh muốn bọn em ghi nhận ở đây là điểm khác cơ. Em có biết đó là gì không?"
'cuti' đáp:
"Điểm gì cà? Ái chà, căng à nha."
'haothu' lên tiếng:
"Anh mổ xẻ chuyện 'footprint' với bọn em rồi để cho bọn em tùy chọn muốn đào thêm hay dừng lại mà không tỏ vẻ quan trọng chuyện này. Vậy chuyện gì quan trọng nhỉ?"
'docco' lên tiếng:
"Em nghĩ là em đoán được. Ý anh là muốn giới thiệu đường hướng và lối khai triển một cách logic phải không ạ?"
Tôi đáp:
"Anh không nói là những chuyện mình vừa bàn không quan trọng. Anh chỉ nói rằng tùy người, tùy nhu cầu mà nó quan trọng nhiều hay ít. 'docco' nói đúng đó, nhưng còn gì nữa?"
'ccxx' cũng tham gia:
"Không biết em nghĩ có đúng không nhưng xem lại mạch chuyện từ nãy giờ, em thấy một điểm khá quan trọng là ngoài tính logic còn có tính tập trung và sự tinh tế trong khi nhận xét vấn đề. Phải không anh?"
Hết sức hoan hỉ, tôi đáp:
"Voila! chính xác. Logic tối cần thiết nhưng tính tập trung và sự tinh tế không thể thiếu được. Sau này, khi em đi đến chỗ viết shellcode, dò stack mà lại thiếu sự tinh tế thì sẽ không thể đạt kết quả được. Đối với 'hacker', mỗi chi tiết bé nhỏ đều có thể mang một giá trị lớn lao. Chúng có thể làm em mất ăn, mất ngủ, mất thời gian để rồi, đến lúc nào đó em sẽ vò đầu và tự rủa mình vì đã 'sót' chúng trong khi phân tích. Thật ra, logic + tập trung + tinh tế là ba đức tính cần thiết không riêng gì trong bảo mật mà nó cần thiết trong các ngành khoa học."
'docco' nói:
"Em sẵn sàng tiếp nhận quan điểm này. Đừng nói đi đâu xa, những lúc làm bài tập hoặc viết một đoạn code đơn giản mà thiếu tập trung thì có chuyện ngay. Đặc biệt là lúc bị 'có chuyện' mà thiếu tinh tế thì tìm lỗi muốn... khùng luôn."
Tôi muốn kết thúc buổi 'đà khía' nên rút ngắn:
"Thôi, mấy anh em mình ngồi dính một chỗ đã quá lâu. Có lẽ lần sau mình mới đi vào chi tiết OS 'footprint' trên tcp/ip vì mình bị... 'cháy' kế hoạch rồi. Điều này cũng tốt vì bọn em có thêm thời gian để xem kỹ hơn về tcp/ip. Mấy đứa cũng nên đọc lại nội dung 'đà khía' lần này và ráng đúc kết vấn đề để làm nền cho lần tới."
'docco' đáp:
"Dạ, vậy cũng tốt mà anh. Em vẫn còn lủng củng nhiều điểm trên tcp/ip nên hoãn lại thêm một tí thì tiện hơn."
'ccxx' nhấm nhẳng:
"Em còn muốn cãi với ông Khoa về chuyện 'kiddie' dùng công cụ khó hay dễ vậy mà anh phải đi rồi. Thôi vậy, để em về chuẩn bị thêm để 'đấu' với ổng một trận. Anh làm trọng tài cho tụi em nha?"
Tôi cười, đáp:
"Ừa, miễn sao 'đấu' để đem lại một kết quả nào đó ích lợi thì anh làm trọng tài liền."
'cuti' phát biểu:
"Em rút kinh nghiệm những lần trước, lần này em sẽ in ra nội dung 'đà khía' để đọc lại và suy gẫm kỹ hơn. Em bị cảm giác là càng ngày càng bị tụt đằng sau."
'docco' đáp:
"Thì tui làm như vậy từ lâu rồi ông Hưng. Chẳng những thế, tập bài tui in ra bây giờ chằng chịt với những dòng gạch dưới, đóng khung, tự chú thích.... tá lã luôn. Không thì không nhớ xuể đâu á."
Tôi trả lời:
"Tùy mỗi đứa, tùy cách phân tích và chọn lọc thông tin cho mình thôi. Miễn sao rút tỉa được vài điều là tốt rồi. Nếu không hiểu thì sẽ thấy nặng nề và nếu kéo dài ở tình trạng 'không hiểu' này thì sẽ thì thấy... chán. Cái đó mới là hoài của nói theo lối nói người miền Bắc :). Thôi, anh phải đi. Hẹn mấy đứa tuần sau nếu rảnh."
và tôi logoff..
18/11/2005
<còn tiếp>
Bộ bốn hoàn toàn im lặng nhiều phút đồng hồ. Hồi lâu, 'docco' lên tiếng:
"Em thấy rõ cái thứ nhì khác cái thứ nhất một chút là cái thứ nhì có thêm Content-Length và Content-Type thì hơi khác một chút vì không có đoạn 'charset=iso-8859-1'. Tại sao chúng lại khác nhau ở mấy điểm này? Chắc chắn chúng là 2 server riêng biệt vì một cái là www.mydomain.com, cái kia là www2.mydomain.com. Em chỉ không hiểu được lý do tại sao chúng khác nhau mặc dù cả hai đều là IIS 5.0."
'ccxx' nhận định:
"Hay là một trong hai server trên có banner giả? Dám lắm đó. Anh đang khai triển việc thay đổi banner phải không nào? Vậy chắc chuyện này có thể lắm."
'cuti' và 'haothu' cùng cảm thán:
"Ái chà."
"Đúng rồi."
Tôi cười, thong thả đáp
"Bé Như nhà mình tinh tế lắm. Rõ ràng là mình đang khai thác chuyện thay đổi banner mà. Quả thật một trong hai server trên giả dạng banner đó. Nếu vậy làm sao mình xác định được cái nào thiệt, cái nào giả?"
'docco' xuýt xoa:
"Ái chà, thật là lý thú. Em không ngờ đào xới mấy cái HTTP header ở tầng này lại có những điều lý thú đến như vậy. Làm sao mình xác định được cái nào thiệt, cái nào giả bây giờ anh?"
Tôi đáp:
"Hì hì, anh hỏi em, em hỏi lại anh? Cái này để em suy nghĩ trước cái đã. Anh trả lời liền thì mất hay đi. Em tìm cách thử một cái xem nào?"
'ccxx' thốt lên:
"A... có rồi, có rồi. Trường mình có một con server chạy Windows 2000 và IIS 5. Cứ thử telnet vào nó và chạy y hệt dòng HEAD như trên ví dụ thì sẽ biết ngay thôi."
'cuti', 'haothu', 'docco' đồng cảm thán:
"Đúng rồi."
"Ờ hớ."
"Sao mình không nghĩ ra nhỉ? Đúng là đàn bà, con gái tinh tế mấy chuyện này."
Sau vài phút, 'cuti' lên tiếng trước. Quả thật mấy ông đực rựa nhanh nhảu hơn trong chuyện 'động tay, động chân' nhưng lại chậm hơn mấy cô khoản 'nhận xét tinh tế'
"Thằng thứ nhì đúng là thằng IIS 5.0"
Tiếp theo đó là 'docco', 'haothu' và 'ccxx' đồng xác nhận:
"Đúng rồi, chắc chắn server thứ nhì chạy con IIS 5.0 thứ thiệt."
"Hết đường thoát."
"Em đã nói thế."
và nhiều câu trao đổi khác.
Cái YIM 'conference' bé nhỏ trở nên rộn rã bằng những câu cảm thán. Tôi hiểu sự rộn rã này không phải tính quan trọng hay mới mẻ của những điều bộ bốn tìm thấy mà ở chỗ chính ở chỗ bộ bốn nhúng tay vào việc quan sát, phân tích, thao tác, so sánh và đúc kết ra được. Tôi lên tiếng:
"Trong hai ví dụ trên, còn có chi tiết nào khác nhau giữa hai server? Chi tiết này hết sức đặc biệt. Bọn em xem thử?"
Như tôi dự phỏng, chính 'ccxx' lại tìm ra điểm khác biệt trước tiên trong bộ bốn. 'ccxx' đáp:
"Em tìm ra rồi. Cái khác nhau là 'HTTP/1.1 404 Not Found' và 'HTTP/1.1 404 Object Not Found' phải không anh? Server thứ nhất chỉ thông báo là 'không tìm thấy' còn con IIS thì lại thêm chữ 'object' vào trong thông điệp."
'haothu' đáp, vẻ tiếc rẻ:
"Công nhận bà Như lanh thiệt. Tui cũng vừa tìm ra, chưa kịp nói thì bà đã làm xong rồi."
Tôi hỏi tiếp:
"Vậy bọn em nghĩ điểm khác nhau mà Như đưa ra có gì quan trọng?"
'cuti' láu táu lên tiếng:
"Em thấy điểm khác biệt này chẳng ích lợi gì cả. Mấy ông Microsoft hay có thói làm cho khác người vậy thôi à."
'ccxx' nguýt 'cuti':
"Hứ... cũng là chứng nào tật nấy. Chưa suy nghĩ cho kỹ đã đôm đốp nữa rồi. Trong khuôn khổ 'nhận diện', điểm khác biệt kia hẳn phải có một giá trị nào đó chớ?"
'cuti' lúng búng với 'ccxx':
"Èm... thì anh có nói gì đâu à."
Tôi can gián ngay:
"Thôi thôi. 'ccxx' nhận định vậy là chính xác. Điểm khác biệt ở đây giúp chúng ta dễ dàng nhận ra đâu là IIS thật, đâu là IIS giả mạo. Trên *nix, apache thường được dùng làm web service nhất. Những ai rành rõi với chuyện biên dịch thường tải mã nguồn của apache về và sửa lại thông tin của banner trong nguồn. Gần đây, những ai dùng apache còn có thêm mod_security cho phép 'giả' banner nữa. Tuy vậy, có dấu banner vẫn không dấu được những đặc điểm khác. Với ví dụ thứ nhất, mình biết ngay đây là banner 'giả mạo'. Chuyện xác định banner thật của nó là gì là chuyện khác nữa nhưng trước mắt mình có thể xác định phần nào đó hệ điều hành đang chạy web server đó không hẳn là Windows 2000. Điều tiếp theo là phải xác định rõ hơn nếu muốn tiếp tục thăm dò."
'haothu' hỏi:
"Nếu vậy em thấy chuyện giả mạo banner để dấu danh tánh đâu có ích lợi gì cho lắm đâu anh?"
Tôi cười, hỏi sang 'docco', 'cuti' và 'ccxx':
"Bọn em nghĩ sao về nhận định của 'haothu'?"
'docco' trả lời trước:
"Em thấy trước tiên nó đánh lừa được mấy ông kiddie. Đây cũng là chuyện ích lợi."
'cuti' ngần ngừ:
"Em.... em thì thấy nó có lợi khá nhiều. Ngoài chuyện đánh lừa kiddie, nó có thể đánh lừa được cả đống công cụ dùng để tự động thăm dò hông chừng. Em thấy có khá nhiều công cụ dành riêng cho công tác này, cả thương mại lẫn mã nguồn mở. Ví dụ chương trình tự động kia 'nhìn' thấy dịch vụ là IIS thì nó chỉ dùng các lỗi của IIS có trong database của nó mà... nện. Mà nện thế này thì trật lất hết vì thật sự dịch vụ này đâu phải là IIS. Em thấy đây cũng là một điểm hay."
'ccxx' phát biểu:
"Em thấy tùy mức độ kinh nghiệm của kẻ thăm dò. Nếu thăm dò kiểu như anh nói ở đây thì có ma nào mà dấu nổi. Tuy nhiên, em nghĩ là 'cuti' rất có lý với ý kiến dùng nó để lừa các công cụ tự động."
Tôi đáp:
"Hay lắm, ráng 'động não' đều đều hả :). Quả thật, dùng phương pháp thay đổi banner chỉ có thể đánh lừa những người chưa đủ kinh nghiệm và một số tools tự động hoá chưa đủ tinh vi. Tuy vậy, đánh lừa được nhóm 'thăm dò' ở dạng hoàn toàn phó mặc vào công cụ cũng đã là đáng kể vì nhóm này chiếm đa số. Vậy, trên phương diện phòng thủ, liệu mình có nên ứng dụng phương cách 'giả' banner không?"
'cuti' đáp:
"Em nghĩ là nên. Lừa được chút nào hay chút đó chớ anh? :)"
'docco' lên tiếng:
"Em nghĩ cũng nên làm nhưng nếu nó không thật sự tác dụng thì không nên quá tốn công sức với nó."
Tôi đáp:
"Đúng rồi. Nếu có thể 'giả' để giảm thiểu những màn thăm dò chung chung thì tại sao không làm? Em nên biết, chỉ có chừng dưới 10% các cú rà tự động được tiếp tục bằng quá trình 'rà' bằng tay để xác định thêm thông tin mục tiêu. Thông thường, quá trình rà tự động chỉ để thu thập một số mục tiêu có thông tin cụ thể mà kẻ thâm nhập muốn tìm. Tuy nhiên, đối với kẻ có quyết tâm thăm dò một mục tiêu cụ thể nào đó thì chuyện 'giả' có lẽ không tác dụng gì mấy.
Bọn em có nghe đến khái niệm security through obscurity chưa?"
'docco' đáp:
"Em có thấy nhắc đến nhiều nơi nhưng em không đào sâu lắm vì không rõ tác dụng của nó. Nó là gì vậy anh?"
Tôi nói tiếp:
"Ừa, security through obscurity dịch nôm na ra tiếng Việt là bảo mật bằng tính bất khả định. Hay nói một cách khác, vì mục tiêu không được rõ ràng nên nó có vẻ bảo mật hơn. Có hẳn một trường phái rất chuộng security through obscurity nhưng bản thân anh thì anh không chuộng bởi vì nó thuộc về cái vỏ bên ngoài mà thôi. Đối với những ai thật sự muốn thâm nhập thì cái 'vỏ' này mỏng manh lắm. Nếu có thời gian và điều kiện thì thêm cái vỏ này cũng tốt nhưng nếu chỉ phó mặc vào nó để 'bảo mật' thì rất phiến diện."
'cuti' thắc mắc:
"Họ làm sao gọi là 'chuộng' vậy anh?"
Tôi đáp:
"À, 'chuộng' ở đây là họ dành nhiều thời gian, công sức để tạo một lớp vỏ 'giả' để đánh lừa kẻ tấn công. Có thể lớp vỏ này làm chậm bước thâm nhập vì kẻ muốn tấn công vì họ mất thời gian xác định thật tính của mục tiêu. Tuy vậy, thiếu bảo mật từ bên trong ra, thiếu bảo mật thật sự thì lớp vỏ này tan vỡ nhanh chóng."
'cuti' hỏi tiếp:
"Em nghĩ là chuyện giả một cái banner đâu có mất thời gian đâu anh?"
Tôi đáp:
"Ừa, đối với mã nguồn mở thì đây là chuyện không mất thời gian cho lắm. Tuy vậy, ít nhất em phải cần thời gian để biên dịch lại software. Đối với software thương mại thì đây là chuyện hoàn toàn khác. Nó dính đến chuyện bản quyền, chuyện giới hạn thay đổi software nên rất phiền phức. Trên mức độ banner thì thế, nhưng chuyện 'đánh lừa' còn đi sâu xuống tcp/ip stack nữa. Họ 'chuộng' phương pháp này đến độ tìm cách thay đổi tcp/ip stack để dấu những đặc tính của các gói tin đi ra / đi vào từ các cổng dịch vụ bởi vì các gói tin này mang những đặc điểm có thể dùng để xác định 'footprint' nữa.
Nếu em chỉ quản lý một vài máy chủ thì có lẽ không quá phiền phức nhưng nếu em phải quản lý cả một hệ thống chằng chịt có nhiều máy chủ, nhiều thiết bị thì sự thể rất khác. Ngay cả em chỉ quản lý một vài máy chủ mà không cẩn thận, tỉ mỉ thì cũng vô ích bởi vì em có thể 'dấu' đầu này nhưng để lộ đầu kia thì cũng chẳng phục vụ được ý định 'dấu'."
'cuti' cảm thán:
"Chà... chuyện phức tạp vậy sao anh? Hoá ra bảo mật cũng có năm bảy đường. Em thấy chuyện 'giả' này có vẻ thú vị lắm."
'docco' xen vào:
"Cho em hỏi một chi tiết nha anh? Anh nói là trên *nix người ta thường thay đổi source của apache hay dùng mod_security để giả banner. Vậy trên Windows và dùng IIS thì có phương cách nào tương tự không anh? Em nghĩ IIS thì không thể điều chỉnh mã nguồn rồi đó."
Tôi cười, đáp:
"Chà chà, bộ em cũng muốn theo trường phái 'security through obscurity' sao? :). Trên Windows thì có một số soft. Anh không nhớ chính xác vì anh không 'chuộng' mấy cái này nhưng anh biết Windows có một cái gọi là urlscan. Nó làm việc trên tầng ISAPI của dịch vụ web của IIS và cho phép em 'giả' banner đó. Nếu thích thì vào site của Microsoft mà tham khảo thêm. Anh nghĩ em có thể táy máy đến mấy các dll của inetsrv của Windows để đổi banner nhưng chắc sẽ mất thời gian. Hơn nữa, đã dấu thì dấu cho trót, phải đổi hết trọn bộ error pages của IIS không thì banner một nơi mà error pages một nẻo."
'haothu' thắc mắc:
"Anh vừa nói chuyện thay đổi tcp/ip stack để che dấu 'footprint', em thấy cái này lạ ghê. Anh nói rõ hơn một tí được không anh?"
Tôi đáp:
"Ừa, đó cũng là một trong những lý do anh đề nghị bọn em đọc kỹ về tcp/ip lần trước để dễ hình dung hơn đó nhưng mấy anh em mình sa đà ở mức banner nên chưa đề cập đến level này. Chắc chắn mình sẽ đụng đến khoảng đó thôi. Em an tâm."
Tôi tiếp tục phần đang khai triển ở trên:
"OK, nếu mình biết 'thằng' thứ nhất ở trên là giả mạo, làm sao mình xác định được danh tánh thật sự của nó là gì?"
Bộ bốn lại im lặng. Sau vài phút, 'docco' lên tiếng:
"Ái chà, cái này mới vui á. Em mghĩ chẳng dễ tí nào."
'haothu' nhận định:
"Em nghĩ chắc phải dùng phương pháp so sánh như kiểu mình so sánh với một IIS server như hồi nãy thôi anh. Anh thấy chuyện này khả thi không?"
Tôi đáp:
"Khả thi chớ sao không em? Em nên nhớ rằng, bước thăm dò bằng tay tuy chậm nhưng nó luôn luôn cho em kết quả xác thực hơn bước thăm dò tự động bằng công cụ nào đó. Vậy, để so sánh thì mình cần có cái gì?"
'haothu' trả lời:
"Nhất định là mình phải có các bản mẫu 'xịn' rồi cứ dùng cái mình đang thăm dò mà so sánh với bản 'xịn' là xong."
Tôi khơi mào:
"Vậy mình cần phải thu thập hết các bản mẫu 'xịn' :). Cái này còn gọi là 'footprint database'. Tùy mỗi người có cách lưu trữ và so sánh nhưng điểm cốt lõi là: dù có 'rà' bằng tay hay 'rà' tự động, em phải có một số thông tin mẫu nào đó để làm chuẩn. Nếu không, em không thể so sánh cái mình thấy (từ việc thăm dò) với một cái gì khác cả."
'haothu' hỏi tiếp:
"Vậy mình phải 'thăm dò' hết các loại web server để lấy 'footprint' thứ thiệt để dành hay sao anh? Cực quá vậy? Có database nào có sẵn mấy cái này không anh?"
Tôi đáp:
"Anh nghĩ là có nhưng chưa thấy phổ biến ở bên ngoài như một database bình thường mà nó thuộc một công cụ thăm dò ở dạng mình đang bàn. Bởi vậy, ngay từ đầu anh đã nói: muốn thâm nhập một cách đúng nghĩa, em phải rất kiên nhẫn, phải có căn cơ và phải hiểu mục tiêu của mình là vậy đó."
Tôi nói tiếp:
"Ở đây anh muốn nói đến phương hướng tiếp cận vấn đề chớ không phải cách giải quyết cụ thể cho từng trường hợp, từng khúc mắc. Hướng tiếp cận ở đây là: tìm và thu thập các 'footprint' của các web server để làm tư liệu cho việc so sánh về sau. Còn chuyện giải quyết thế nào thì mình đã bàn qua phần nguyên tắc. Anh chỉ 'khơi mào' cho em để khởi động còn muốn chạy xa, chạy nhanh thì tuỳ ở em :).
Với hai ví dụ trên, anh còn muốn nhắc đến một điểm khác rất quan trọng. Bọn em thử copy và paste chúng vào hai cột cạnh nhau để dễ so sánh, dùng soft nào cũng được, cách nào cũng được, miễn sao có thể đặt chúng bên cạnh nhau để so sánh. Chắc chắn em sẽ tìm ra thêm điểm khác nhau nữa."
Vài phút trôi qua, 'ccxx' lại lên tiếng trước tiên:
"Em thấy rồi. Vị trí thứ tự của các HTTP header khác nhau phải không anh?"
Tôi đáp:
"Chính xác. Chúng khác nhau đó. Trước đây anh cũng thắc mắc chuyện này nhưng sau khi xem mấy các RFC cho HTTP thì mới thấy là chẳng có áp đặt cụ thể nào về thứ tự trình bày của các HTTP header cả. Bởi thế, mỗi nơi implement mỗi khác và đây là một điểm đặc thù giúp mình phân tích và phân biệt 'footprint' nữa."
'cuti' thắc mắc:
"Sao anh biết được những chi tiết tinh vi và khó thấy như thế vậy anh? Có tài liệu nào đó hướng dẫn mấy chuyện này không anh?"
'docco' cũng lên tiếng:
"Dạ, em cũng thắc mắc như thằng Duy vậy. Em chưa hề thấy ở đâu nói đến những chi tiết lý thú như thế này về chuyện nhận diện 'footprint'."
Tôi đáp:
"Có thể có những tài liệu phân tích những chuyện này. Anh không chắc vì anh chưa hề đọc được cái nào cả. Để trả lời thắc mắc của 'cuti', anh vô tình tìm ra những khác biệt đó trong khi 'táy máy' và test một web application viết bằng java. Application này được deploy trên cả Windows lẫn Unix nhưng có web-tier khác nhau. Trên Windows thì dùng IIS và trên *nix thì dùng Apache và iPlanet (của Sun). Anh phải bắt lấy hết các header của từng loại web server để tạo bộ luật mapping cho cái reverse proxy nên mới thấy được những cái khác nhau kia. Kinh nghiệm xương máu đó! :)"
'haothu' rên rỉ:
"Ôi trời, anh 'Việt-hóa' đoạn trên dùm em được không anh? cái gì mà 'web-tier', rồi đến 'deploy', 'mapping', rồi 'reverse proxy'... Em đọc thấy muốn... tẩu hoả luôn :("
Tôi cười, đáp:
"Ái chà... anh cũng chẳng biết phải dịch ra sao nữa. Nếu em có đụng chạm đến các ứng dụng web hạng... nặng thì hẳn sẽ biết được khái niệm 'mutlti-tier' application. Cái này có nghĩa là một ứng dụng có nhiều tầng như: tầng web, tầng logic, tầng dữ liệu (database). Còn chữ 'deploy' thì có nghĩa đại loại như cài đặt, thiết lập một chương trình mới trên một máy chủ. 'deploy' mang nghĩa rộng hơn 'install' (là cài đặt). Riêng 'mapping' thì anh không biết phải dịch ra sao. Nó có nghĩa nhưng là so sánh, biên dịch 2 phía thông tin. Ví dụ, phía A có thông tin là 1 có thể được 'map' thành Z ở phía B chẳng hạn. Chữ 'reverse proxy' có nghĩa là 'proxy ngược'. Người dùng trong LAN muốn truy cập Internet thì đi xuyên qua 'forward proxy', còn người dùng từ Internet muốn vào web server của em thì đi qua 'reverse proxy'. Những khái niệm này khá dễ hiểu, em chịu khó tham khảo thêm trên net."
'cuti' nhận xét:
"Ra vậy. Có quá nhiều kiến thức đi ra từ kinh nghiệm bản thân, trong môi trường làm việc thật sự chớ chẳng phải cái gì cũng có trong sách."
Tôi đáp:
"Đúng thế. Anh đã có lần đề cập trước đây, sách là nguồn thông tin tổng quát. Nó giúp em hình thành một cái 'sườn' của vấn đề. Tùy vào em mà hình thành cái 'ruột'. Những điều mấy anh em mình 'đà khía' ở đây có rất nhiều điều đi từ 'kinh nghiệm xương máu' mà có. Anh biết có những cái lạ lẫm, khó hình dung bởi vì em chưa gặp qua. Tuy nhiên, đến một lúc em đụng phải điều gì đó mình đã bàn ở đây thì tự nhiên sự việc sẽ sáng tỏ, dễ dàng thôi."
'cuti' thắc mắc:
"Vậy anh muốn bọn em đi thu thập mấy cái header 'xịn' để làm tư liệu hả anh?"
Tôi đáp:
"Tùy em thôi. Nếu em thấy thích thú chuyện này thì em có thể dành thời gian để đào xới chúng. Anh dám chắc em sẽ thu thập được nhiều điều lý thú. Tuy nhiên, điểm cốt lõi anh muốn bọn em ghi nhận ở đây là điểm khác cơ. Em có biết đó là gì không?"
'cuti' đáp:
"Điểm gì cà? Ái chà, căng à nha."
'haothu' lên tiếng:
"Anh mổ xẻ chuyện 'footprint' với bọn em rồi để cho bọn em tùy chọn muốn đào thêm hay dừng lại mà không tỏ vẻ quan trọng chuyện này. Vậy chuyện gì quan trọng nhỉ?"
'docco' lên tiếng:
"Em nghĩ là em đoán được. Ý anh là muốn giới thiệu đường hướng và lối khai triển một cách logic phải không ạ?"
Tôi đáp:
"Anh không nói là những chuyện mình vừa bàn không quan trọng. Anh chỉ nói rằng tùy người, tùy nhu cầu mà nó quan trọng nhiều hay ít. 'docco' nói đúng đó, nhưng còn gì nữa?"
'ccxx' cũng tham gia:
"Không biết em nghĩ có đúng không nhưng xem lại mạch chuyện từ nãy giờ, em thấy một điểm khá quan trọng là ngoài tính logic còn có tính tập trung và sự tinh tế trong khi nhận xét vấn đề. Phải không anh?"
Hết sức hoan hỉ, tôi đáp:
"Voila! chính xác. Logic tối cần thiết nhưng tính tập trung và sự tinh tế không thể thiếu được. Sau này, khi em đi đến chỗ viết shellcode, dò stack mà lại thiếu sự tinh tế thì sẽ không thể đạt kết quả được. Đối với 'hacker', mỗi chi tiết bé nhỏ đều có thể mang một giá trị lớn lao. Chúng có thể làm em mất ăn, mất ngủ, mất thời gian để rồi, đến lúc nào đó em sẽ vò đầu và tự rủa mình vì đã 'sót' chúng trong khi phân tích. Thật ra, logic + tập trung + tinh tế là ba đức tính cần thiết không riêng gì trong bảo mật mà nó cần thiết trong các ngành khoa học."
'docco' nói:
"Em sẵn sàng tiếp nhận quan điểm này. Đừng nói đi đâu xa, những lúc làm bài tập hoặc viết một đoạn code đơn giản mà thiếu tập trung thì có chuyện ngay. Đặc biệt là lúc bị 'có chuyện' mà thiếu tinh tế thì tìm lỗi muốn... khùng luôn."
Tôi muốn kết thúc buổi 'đà khía' nên rút ngắn:
"Thôi, mấy anh em mình ngồi dính một chỗ đã quá lâu. Có lẽ lần sau mình mới đi vào chi tiết OS 'footprint' trên tcp/ip vì mình bị... 'cháy' kế hoạch rồi. Điều này cũng tốt vì bọn em có thêm thời gian để xem kỹ hơn về tcp/ip. Mấy đứa cũng nên đọc lại nội dung 'đà khía' lần này và ráng đúc kết vấn đề để làm nền cho lần tới."
'docco' đáp:
"Dạ, vậy cũng tốt mà anh. Em vẫn còn lủng củng nhiều điểm trên tcp/ip nên hoãn lại thêm một tí thì tiện hơn."
'ccxx' nhấm nhẳng:
"Em còn muốn cãi với ông Khoa về chuyện 'kiddie' dùng công cụ khó hay dễ vậy mà anh phải đi rồi. Thôi vậy, để em về chuẩn bị thêm để 'đấu' với ổng một trận. Anh làm trọng tài cho tụi em nha?"
Tôi cười, đáp:
"Ừa, miễn sao 'đấu' để đem lại một kết quả nào đó ích lợi thì anh làm trọng tài liền."
'cuti' phát biểu:
"Em rút kinh nghiệm những lần trước, lần này em sẽ in ra nội dung 'đà khía' để đọc lại và suy gẫm kỹ hơn. Em bị cảm giác là càng ngày càng bị tụt đằng sau."
'docco' đáp:
"Thì tui làm như vậy từ lâu rồi ông Hưng. Chẳng những thế, tập bài tui in ra bây giờ chằng chịt với những dòng gạch dưới, đóng khung, tự chú thích.... tá lã luôn. Không thì không nhớ xuể đâu á."
Tôi trả lời:
"Tùy mỗi đứa, tùy cách phân tích và chọn lọc thông tin cho mình thôi. Miễn sao rút tỉa được vài điều là tốt rồi. Nếu không hiểu thì sẽ thấy nặng nề và nếu kéo dài ở tình trạng 'không hiểu' này thì sẽ thì thấy... chán. Cái đó mới là hoài của nói theo lối nói người miền Bắc :). Thôi, anh phải đi. Hẹn mấy đứa tuần sau nếu rảnh."
và tôi logoff..
18/11/2005
<còn tiếp>

markdown:
**14. Banner, thật hay giả?:** *Một tuần lễ trôi qua. Tôi nhận được vài e-mail của bộ tứ cuti, ccxx, docco và haothu với nội dung phần lớn là những thắc mắc về lý do tại sao việc xác định "footprint" của mục tiêu lại quan trọng đến như vậy. Tôi quá bận rộn nên chỉ hồi đáp một cách tổng quát và hẹn lần 'đà khía' kế tiếp sẽ trả lời chi tiết hơn. Tôi cũng không quên nhắc mấy 'trự' nên xem kỹ cơ chế truyền tải thông tin của giao thức TCP vì nó sẽ dẫn đến một bước sâu hơn trong việc tìm "footprint" của mục tiêu. Bộ tứ đề nghị hoãn lại cuộc 'đà khía' thêm một tuần để đủ thời gian chuẩn bị và tất nhiên là tôi đồng ý.*
Thêm một tuần lễ trôi qua. Tôi nhận được một offline message của 'cuti' hẹn cuối tuần gặp nhau trên YIM. Tôi đồng ý.
Chiều thứ bảy, lúc 2 giờ trưa tôi vào YIM thì bộ tứ đã có mặt đầy đủ. Trong chốc lát tôi nhận được lời mời tham gia "conference".
Thêm một tuần lễ trôi qua. Tôi nhận được một offline message của 'cuti' hẹn cuối tuần gặp nhau trên YIM. Tôi đồng ý.
Chiều thứ bảy, lúc 2 giờ trưa tôi vào YIM thì bộ tứ đã có mặt đầy đủ. Trong chốc lát tôi nhận được lời mời tham gia "conference".
*'cuti nhanh nhảu:*
"Chào anh, anh khoẻ hông? Bọn em lên đây cả tiếng đồng hồ rồi. Đang nói chuyện tầm phào cho vui trong khi chờ anh đó."
*Tôi chào bộ tứ:*
"Chào mấy đứa. Khoẻ hết chớ? Sao lên sớm vậy? Khoa có chuyện gì mà vắng mặt lâu vậy em?"
*'haothu' đáp:*
"Dạ em kẹt một số chuyện gia đình nhưng mọi chuyện xong hết rồi. Bây giờ em sẽ tham gia 'đà khía' đều đặn hơn. Em cũng lấy nội dung mấy lần trước để xem hết rồi anh."
*'ccxx' đi ngay vào vấn đề:*
"Em có gởi mail hỏi anh lý do tại sao việc xác định 'footprint' lại quan trọng như vậy và anh hứa là anh sẽ giải thích chi tiết. Vậy bây giờ anh tiện giải thích không anh?"
*'docco' chêm vào:*
"Ui, không ngờ bà Như lanh thiệt. Tui chưa kịp hỏi bà đã hỏi rồi. Anh D ơi, em đọc kỹ lại mấy bài anh em mình 'đà khía' thì thấy việc dò tìm và xác định 'footprint' của mục tiêu rất quan trọng. Như anh đã đề cập trước đây
*muốn khai thác một mục tiêu thì phải nắm rõ mục tiêu*. Tuy nhiên, em vẫn chưa hoàn toàn nắm được vấn đề một cách xác thực. Anh nói rõ hơn được không anh?" *Tôi đáp:*
"Ừa, việc xác định 'footprint' quan trọng và mất thời gian bởi vì nó quyết định cho sự thành công hay thất bại của việc thâm nhập. Nói trên bình diện bảo mật, che dấu hoặc thay đổi 'footprint' sẽ phần nào đánh lạc hướng hoặc làm chậm kẻ muốn tấn công. Những hệ thống, những máy chủ không có gì bảo vệ thì chẳng có gì đáng nói; chỉ cần một vài thao tác là em đã có thể xác định 'footprint' của nó cho nên việc xác định 'footprint' không còn đáng kể nữa. Tuy nhiên, có những trường hợp admin của hệ thống nào đó cố tình thay đổi 'footprint' của hệ thống để đánh lừa kẻ muốn tấn công thì sự thể hoàn toàn khác."
*'haothu' hỏi tiếp:*
"Cụ thể như thế nào anh? Em thấy khó hình dung quá :("
*Tôi trả lời:*
"Ừa, quả thật là hơi khó hình dung nếu em chưa 'kinh qua' những chuyện này. Hãy thử 'đào xới' một tí xem sao? Anh nhớ đã có lần anh đề cập đến chuyện 'các trình độ thâm nhập' rồi phải không?"
*'cuti' đáp:*
"Dạ, có phải ý anh là chuyện 'dân hacker thứ thiệt' tự thử nghiệm và tìm lỗi để thâm nhập, 'dân hacker bán chuyên' thì dựa vào lỗi đã được công bố trên bug-track và dân 'kiddie' thì chỉ dùng công cụ có sẵn' không vậy?"
*Tôi đáp:*
"Ừa, đúng vậy. Hãy thử nghĩ xem, trường hợp 'dân hacker thứ thiệt tự thử nghiệm và tìm lỗi', chuyện 'footprint' dính líu gì ở đây?"
*'ccxx' đáp:*
"Em nghĩ chuyện 'footprint' chẳng còn quan trọng với trường hợp 'hacker thứ thiệt' nữa."
*Tôi hỏi tiếp:*
"Em giải thích thêm một tí được không?"
*'ccxx' đáp:*
"Em thấy quá hiển nhiên mà anh? Nếu như 'hacker thứ thiệt' tự nghiên cứu và tìm lỗi thì hẳn nhiên anh ta phải làm việc cụ thể trên một hệ điều hành, trên một môi trường nào đó. Em hình dung là anh ta phải lập một máy chủ có hệ điều hành cụ thể, có phiên bản chương trình cụ thể rồi mới thử nghiệm và tìm lỗi. Cho nên, 'footprint' nằm trong tay anh ta là chuyện hiển nhiên."
*Tôi cười, đáp:*
"Rồi, cuti, haothu, docco nghĩ sao với nhận định này của 'ccxx'?"
*Cả ba im lặng hồi lâu. Sau cùng, 'haothu' lên tiếng:*
"Em nghĩ 'ccxx' nói đúng lắm nhưng nó chỉ giới hạn trong trường hợp tay 'hacker thứ thiệt' đó tìm lỗi trên chính máy chủ do mình thiết lập. Còn trường hợp tìm lỗi trên một server nào đó thì sao? Tay 'hacker thứ thiệt' ấy vẫn phải xác định 'footprint' như thường. Không biết em nói có đúng không?"
*'docco' lên tiếng:*
"Ý em cũng giống như ý thằng Khoa đó anh."
*'cuti' góp phần:*
"Đúng rồi. Tự thiết lập một máy chủ, cài soft rồi tìm lỗi cụ thể thì chuyện 'footprint' là chuyện không cần thiết vì mình đã thiết lập mọi thứ theo ý. Trường hợp các tay 'hacker thứ thiệt' thử dò tìm lỗi trên các máy chủ không phải do họ làm chủ có xảy ra không anh?"
*Lúc này tôi mới lên tiếng:*
"Anh tin rằng nhận định của 'ccxx' rất hữu lý. Hầu hết các trường hợp thử nghiệm và tìm lỗi xảy ra trên chính server mà tay 'hacker thứ thiệt' ấy thiết lập. Cho nên, chuyện xác định 'footprint' ở đây không còn là một việc cần thiết nữa. Riêng trường hợp thử nghiệm trên server không phải do mình thiết lập thì anh không thể xác định được vì chẳng có số liệu nào cho chuyện này. Tuy nhiên, anh hình dung rằng trường hợp 'thử trên server mình không làm chủ' vẫn có thể xảy ra nhưng khá ít. Lý do là thử nghiệm và tìm lỗi như thế khá mơ hồ và kém hiệu xuất. Hơn nữa, để thử nghiệm và tìm lỗi một cách đúng mức, em cần phải sử dụng hàng loạt công cụ như debugging, tracing... em phải lặp đi, lặp lại một test case với nhiều biến số khác nhau để tìm kết quả. Những thao tác này nằm trong khuôn khổ 'local', có nghĩa là em phải có quyền sử dụng và thực thi các công cụ ngay trên máy chủ để tìm lỗi."
*Tôi dừng lại vài giây và hỏi tiếp:*
"Vậy, trường hợp các 'hacker bán chuyên' dựa vào bug-track để thâm nhập thì dính líu gì đến chuyện 'footprint'?"
*Lần này 'cuti' nhanh nhảu trả lời:*
"Em nghĩ nó 'dính líu' nhiều lắm chứ. Em thấy trên bug-track ghi rõ lỗi trên hệ điều hành nào, cho phiên bản của software nào. Điều này chứng tỏ, nếu tìm cách áp dụng nó để exploit trên một hệ điều hành khác, trên phiên bản software khác thì cơ hội thành công hầu như không có. Bởi vậy, dân 'bán chuyên' phải đi qua chặng đường xác định xem mục tiêu của mình có rơi vào 'phạm vi' con bug đã được công bố hay không thì mới có kết quả khả quan."
*Tôi đáp:*
"Hay lắm. Mấy đứa còn ý kiến nào khác không?"
*'docco' lên tiếng:*
"Em nghĩ Hưng nói đúng quá rồi. Chỉ có điều 'dân bán chuyên' xác định 'footprint' ra sao đây?"
*Tôi cười, đáp:*
"Đó. Bây giờ em đã nhận ra tầm quan trọng của việc xác định 'footprint' chưa? Chuyện 'dân bán chuyên' xác định 'footprint' ra sao thì mình sẽ bàn đến."
*'haothu' trả lời:*
"Chuyện này thì quá rõ rồi. Nếu không xác định được 'footprint' thì chỉ có nước làm... mò mà thôi."
*Tôi đẩy thêm:*
"Rồi, mình đã xác định được hai trường hợp. Nếu vậy thì trường hợp các 'kiddie' tìm đâu ra vài món đồ nghề thì dính líu gì đến 'footprint' nhỉ?"
*'ccxx' cười xoà:*
"Hi hi hi, em nghĩ là anh đang hỏi mẹo cái gì đây rồi. Nếu dựa trên khái niệm thế nào là 'kiddie' mà anh đưa ra trước đây thì mấy tay này có sá gì 'footprint' hay không đâu anh? Vả lại, liệu họ có kiên nhẫn hoặc kiến thức để tìm 'footprint' hoặc quý trọng kết quả mình tìm được ở mức độ thăm dò hay không?"
*'docco' phản đối:*
"Tui không đồng ý với bà Như điểm này. Hiện nay có quá nhiều công cụ từ thương mại đến mã nguồn mở và những công cụ này rất mạnh, rất dễ dùng và cũng rất nguy hiểm. Nếu 'kiddie' chịu khó một tí thì chuyện gì cũng có thể được cả."
*'ccxx' phản đòn:*
"Vậy ý ông 'kiddie' đủ khả năng và kinh nghiệm xác định 'footprint' bằng cách dùng công cụ nào đó một cách dễ dàng? Tui không tin như vậy. Cho dù có dùng tool nào đó, dù dễ đến đâu, ông cũng cần có ít nhiều kiến thức trong lãnh vực này trước khi có thể dùng nó một cách hiệu quả. Liệu 'kiddie' có chịu khó đọc hướng dẫn một cách cẩn thận trước khi dùng không? và liệu sau khi lấy được thông tin nào đó, họ có đủ sức đối chiếu với thông tin được công bố hay tìm cách xác định lại thông tin tìm được xem chúng có đáng tin cậy hay không?"
*'haothu' xen vào:*
"Hì hì, bà Như đánh giá 'kiddie' thấp quá vậy? Bản thân tui thì quả thật tui thấy hơi oải khi phải dùng một công cụ chạy trên dòng lệnh và phải đọc hướng dẫn sử dụng. Loại công cụ này thường có hướng dẫn quá ngắn gọn, đọc xong phải vận dụng, suy nghĩ thì mới dùng được. Tuy vậy, nếu tui mà 'kết' một cái gì thì tui sẵn sàng bỏ công ra để lãnh hội nó thôi."
*'cuti' góp chuyện:*
"Em cũng thấy Khoa nói đúng đó. Bản thân em cũng bị dính vào cảm giác này."
*Tôi hướng câu chuyện về trọng điểm:*
"OK, cứ cho là có 'kiddie' có thể dùng các công cụ để xác định 'footprint' một cách không khó khăn, vậy, mình có thể thấy được tầm quan trọng của việc xác định 'footprint' rồi chứ? 'haothu', em thấy sao?"
*'haothu' lững lờ:*
"Dạ, trên mặt nguyên tắc thì sự thể rõ ràng hơn rồi nhưng cái này chắc phải bắt tay vào làm thì mới đánh giá đúng mức được tầm quan trọng của việc tìm 'footprint' thôi."
*Tôi cười, cố gút vấn đề lại:*
"OK, em thử hình dung xem, có bao nhiêu phần trăm 'hacker chuyên', bao nhiêu phần trăm 'hacker bán chuyên' và bao nhiêu phần trăm là 'kiddie'?"
*'haothu' trả lời:*
"Số lượng chính xác thì em không có rồi đó nhưng em nghĩ rằng số 'kiddie' chắc là chiếm đa số, sau đó là đến nhóm 'hacker bán chuyên'. Nhóm 'hacker chuyên' thì có lẽ chỉ chiếm thiểu số mà thôi."
*Tôi hỏi tiếp:*
"Vậy, em thử hình dung có bao nhiêu phần trăm 'kiddie' sẽ tìm tòi 'footprint' khi vớ phải một công cụ dùng để tấn công nào đó? Có bao nhiêu phần trăm dân 'bán chuyên' phải mó tới chuyện 'footprint'? Và nếu họ (cả 'kiddie' lẫn 'dân bán chuyên') không mó đến chuyện 'footprint' thì tỉ lệ thành công sẽ nằm ở mức nào?"
*Không đợi 'haothu' trả lời, 'docco' chen vào:*
"Theo em thì tỉ lệ thành công gần như không có. Nếu cứ nhắm mắt mà phang đại thì chẳng khác gì chó ngáp nhằm ruồi cả."
*Tôi đúc kết điểm thắc mắc của 'haothu':*
"Vậy thì xét trên căn bản, việc tìm 'footprint' là việc rất cần thiết cho quá trình thậm nhập chớ gì? Đồng ý với nhau điểm này rồi chứ?"
*'ccxx' đáp ngay:*
"Em thì thấy điều này sáng tỏ như con thỏ vậy. Chỉ có điều em còn hơi ấm ức là vì em muốn 'đào xới' thêm cho ông Khoa thấy là muốn dùng công cụ nào đó đúng mức thì mình phải có kiến thức căn bản cho vấn đề này."
*'cuti' tiếp theo:*
"Em cũng vậy."
*'docco' cũng cho cảm nghĩ và đưa ra vấn đề kế tiếp:*
"Chắc chắn là việc tìm 'footprint' là việc cần thiết rồi. Bây giờ em muốn hỏi anh là tìm 'footprint' bao gồm những điểm chính nào. Anh cũng hiểu là em chưa dám đặt bọn em ở vị trí là 'dân chuyên', cũng chẳng muốn đặt bọn em ở vị trí là 'kiddie' nên có lẽ bọn em cần hiểu nguyên tắc tìm 'footprint' nhưng đám 'bán chuyên' vậy :)"
*Tôi trả lời, không quên ghẹo 'cuti':*
"OK 'ccxx', anh nghĩ em sẽ có dịp thực hiện ý định thôi. Chắc chắn mình sẽ đụng đến chuyện này. Còn 'cuti',
*em cũng vậy*có nghĩa là 'bà tiền hô, ông hậu ủng' hả? ;-)." *Tôi tiếp tục:*
"Anh nhớ hồi nãy em có nhận xét là dân 'bán chuyên' thường dựa vào bug-track và trên bug-track thường có ghi rõ hệ điều hành, phiên bản của nó và phiên bản software của dịch vụ. Nếu vậy, theo em nghĩ, xác định 'footprint' là xác định những cái gì một cách cụ thể?"
*'docco' liền đáp lời:*
"Oài... quá hiển nhiên mà anh? Tất nhiên là mình xác định ba điều chính:
- mục tiêu chạy trên hệ điều hành nào
- phiên bản của hệ điều hành đó
- software tạo dịch vụ là software gì, có phiên bản nào
phải không anh?"
*Tôi cười, đáp:*
"Đúng rồi. Nhưng... em nên tự tin hơn. Cố gắng đừng kèm thêm đoạn
*'phải không anh'*làm chi :). Nếu 'không phải' hoặc chưa đầy đủ thì anh sẽ ý kiến liền. Đừng lo.
Rồi, vậy thì mình khai triển ba điều 'docco' đưa ra vậy. Câu hỏi thứ nhất được đặt ra:
**làm sao xác định được mục tiêu chạy trên hệ điều hành nào?**" *'bộ tứ' im lặng, trầm ngâm hồi lâu. Sau đó 'cuti' lên tiếng:*
"Em nhớ là em đã có đọc qua vài đoạn về chuyện này nhưng lúc đó em không cho là quan trọng nên không ghi nhận nó. Hình như là 'banner' cái gì gì đó."
*'docco' chêm vào:*
"À, đúng rồi, 'banner grabbing'. Đây là một cách lấy thông tin mình cần về hệ điều hành và phiên bản của mục tiêu phải không anh?"
*Tôi đáp:*
"Đúng rồi, đây là một cách dễ nhất, thông dụng nhất và có thể có kết quả cực kỳ chính xác hoặc cực kỳ sai lạc."
*'ccxx' ngạc nhiên:*
"Sao kỳ vậy anh? làm sao mà vừa có thể chính xác và sai lạc?"
*Tôi cắt nghĩa:*
"Thông thường banner grabbing như thế này, giả sử mục tiêu có dịch vụ telnet đang lắng nghe, em thử:
**Code:**
$ telnet myhost.mydomain.com
Red Hat Linux release 9 (Shrike) myhost.mydomain.com
myhost login:
cho mình thấy ngay mục tiêu đang chạy trên RedHat và phiên bản là 9.0. Thông tin này có thể hoàn toàn chính xác nếu như admin của server này hoàn toàn không thay đổi, che dấu footprint của hệ thống. Nếu vậy thì thông tin cần biết đã có một cách dễ dàng. Tuy nhiên, làm sao xác định được thông tin này xác thực? Nếu mục tiêu không mở dịch vụ telnet thì có thể làm gì khác để xác định thông tin này?"
*'haothu' không trực tiếp trả lời câu hỏi của tôi mà lại hỏi tiếp một câu khác:*
"Ủa, sao anh không cho thông số giá trị cổng dịch vụ ở trên vậy? Em thấy thường thường lệnh telnet đi theo thông số địa chỉ và cổng mà?"
*Tôi đáp:*
"À, nhiều người bối rối chi tiết rất nhỏ này. Khi em dùng lệnh telnet và chỉ có thông số thứ nhất là địa chỉ nhưng không kèm theo thông số thứ hai là cổng thì telnet dùng cổng (đích) mặc định là 23 (cổng telnet). Nói một cách khác, nếu em không cung cấp giá trị cổng thì telnet client (chương trình telnet em dùng trên command prompt là telnet client) sẽ tự động truy cập đến địa chỉ đã cho ở cổng 23. Nếu em cung cấp địa chỉ và cổng thì telnet client sẽ truy cập đến địa chỉ ấy ở cổng được ấn định. Ví dụ, em gõ
**Code:**
$ telnet www.mysite.com 80
thì telnet client sẽ truy cập đến địa chỉ là www.mysite.com ở cổng 80. Rõ rồi chứ?"
*'haothu' ậm ừ:*
"Dạ... nhưng... ùm... mỗi lần em dùng telnet trên windows để telnet đến cổng nào đó, sau em chẳng thấy có chữ gì hết, chỉ có cái command prompt đen ngòm vậy anh? Hay em làm gì sai?"
*Tôi đáp, hơi thiếu kiên nhẫn:*
"À, mấy cái này là do telnet trên Windows không có 'echo' đó thôi. Nếu em gõ Run/cmd rồi trên dos-prompt này em mới gõ
**telnet**thì Windows sẽ dùng telnet client bên trong command window (DOS-console) và em không set 'echo' được cho nên nó... đen ngòm. Nếu em thử gõ Run/C:\Winnt\system32\telnet.exe thì Windows sẽ tạo một process riêng biệt cho telnet client và nó ở trong tình trạng tạm gọi là "full mode", lúc ấy em có thể set 'echo' được. Trong chế độ này, em có thể set biến **LOCAL_ECHO**và nó sẽ hiện ra chữ mỗi khi em gõ thôi. Mấy cái này có trong phần "help" của Windows cả. Em chịu khó tìm hiểu chi tiết chớ mình mà đào sâu mấy thứ này thì đi xa trọng tâm đó em." *'haothu' trả lời:*
"Dạ. Chắc do em chưa mày mò đúng mức thôi."
*'cuti' chen vào:*
"Mấy cái này đúng nghĩa là 'hiểu rõ', 'hiểu ngọn ngành' đây. Ui... biết chừng nào mới 'ngọn ngành' mọi thứ đây trời?"
*Tôi tiếp tục:*
"Thằng này cứ than với thở. Từ từ thì sẽ ngọn ngành thôi em. Em phải đụng đến nó, phải chịu khó thì mới nắm được nhiều. Thôi mình tiếp tục chuyện hồi nãy đi hả?"
*'docco' hỏi ngay:*
"Vậy nếu mục tiêu ấy không có dịch vụ telnet thì mình telnet vào một dịch vụ khác phải không anh?"
*Tôi cười, đáp:*
"Đúng rồi. Nhưng lý do tại sao mình telnet vào một dịch vụ khác?"
*'docco' trả lời:*
"Hình như dịch vụ nào cũng có cái 'banner' hết phải không anh? Nếu vậy, khi mình telnet vào dịch vụ, có nghĩa là mình muốn kết nối với dịch vụ ấy thì nó thường 'chào' mình bằng một biểu ngữ?"
*Tôi đáp:*
"Đúng lắm. Hình như em có ngâm cứu qua mấy cái này rồi phải không Duy?"
*'docco' đáp:*
"Hì hì, đúng là không qua mặt anh nổi. Đúng là em có 'ngâm' qua vài thông tin về chuyện 'footprint' đó anh vì lần trước mình có bàn qua về chuyện này. Em nghĩ chắc nó phải quan trọng nên anh mới khai triển nó, cho nên em đọc thêm để nắm thêm thông tin."
*Rất hài lòng với sự chuyên tâm của docco, tôi đáp:*
"Hay lắm. Nếu em chuyên tâm như vậy thì em sẽ nắm được chìa khoá của vấn đề một cách nhanh chóng đó Duy :)"
*'docco' lúng túng:*
"Dạ... ùm... à.... em chỉ cố quan sát và rút kinh nghiệm từ những lần mấy anh em mình 'đà khía' thôi anh. Em rút ra một điều là anh luôn luôn có dụng ý gì đó khi đưa ra một vấn đề cho nên lần này em lo 'rào' trước, hì hì."
*'cuti' xen vào:*
"Em cũng ráng 'rào' nhưng hình nhưng em chưa vững tâm bằng thằng Duy. Em vẫn chưa có thể xác định là tự nên làm cái gì tiếp."
*'haothu' trêu 'cuti':*
"Tao thấy mày nên lấy vợ là chuyện tiếp theo mày nên làm... tiếp ;-)"
*Tôi thầm nghĩ, mấy ông tướng này làm sao tránh khỏi chit chat. Vậy cũng vui nhưng phải 'điều tác' một tí không thì sa đà, mất thời gian. Tôi bèn lên tiếng:*
"Ừa, nó mà lấy vợ thì chắc khỏi thấy mặt nó luôn. Thôi, mình 'khoá' cái vấn đề đang lở dỡ kia rồi anh phải dọt á."
*'ccxx' lên tiếng:*
"Dạ... cám ơn anh cứu bồ, chớ hông thì mấy ổng chọc đến mai cũng không chịu ngưng đâu :(. Em muốn hỏi anh là nếu mấy ông admin biết trước chuyện những tay thâm nhập cố tìm thông tin từ banner để tìm cách tấn công, họ tháo hết mấy cái banner đi thì lấy đâu mà thăm dò hả anh? Em thì không rõ họ tháo mấy cái banner bằng cách nào nhưng em hình dung là nếu gắn lên được thì phải tháo xuống được."
*Tôi cười, đáp:*
"Ái chà, con bé nói chuyện phòng thủ hả? Đúng là bản năng tự nhiên của phụ nữ ;-). Em đưa ra một điểm hết sức lý thú. Đúng rồi, ngày nay các admin có quan tâm đến bảo mật đều thực hiện việc 'dấu' banner để giảm thiểu thông tin về máy bị tiết lộ. Có nhiều admin còn cực đoan hơn nữa là họ chẳng những dấu mà còn cố tình thay đổi từ A thành B để đánh lừa những kẻ thăm dò nữa."
*'cuti' xen vào:*
"Nhưng mà khoan, cho em hỏi một chi tiết này một tí anh? Hình như mình chỉ thấy được cái banner của một dịch vụ khi mình cố tình truy cập nó ở mức độ thấp hơn phải không anh? Ví dụ em dùng Outlook Express để gởi và nhận mail thì làm sao mình thấy được mấy cái banner kia?"
*Tôi đáp:*
"Em thắc mắc một điểm rất có lý. Thật ra mail client như Outlook Express 'thấy' hết những cái banner nhưng nó thường 'dấu'. Ngoại trừ em muốn xem cái 'header' của nó. Em thử tìm tòi xem trong mấy cái 'header' của smtp mà mail client nhận được, nó có chút ít 'footprint' không? :). Những dịch vụ khác như ftp, khi em dùng ftp client để truy cập ftp server, nếu ftp server này không dấu banner thì em sẽ thấy ngay cái banner trong lúc truy cập. Dịch vụ http thì lại khác, em không thấy mấy cái banner bởi các trình duyệt ứng dụng để 'hiển thị' những thông tin mà người dùng bình thường cần xem mà thôi. Tuy nhiên, nếu em truy cập http service ở dạng 'raw' (như đi qua telnet) thì em có thể thấy rất nhiều thông tin nếu như server này không dấu banner.
Nên nhớ một điều là không phải banner nào cũng chứa đựng thông tin về hệ điều hành và phiên bản của nó. Thông thường nó chỉ chứa tên software tạo dịch vụ (mình telnet vào) và phiên bản của nó. Tuy vậy mình cũng có thể phần nào đoán được hệ điều hành dựa trên thông tin này."
*'cuti' đáp một cách thoả mãn:*
"À, vậy thì tùy dịch vụ mà tìm banner phải không anh? Nhưng hình như cách dùng telnet là chắc ăn nhất. Nhưng mà em thấy chi tiết
*'có thể phần nào đoán được hệ điều hành'*có vẻ không được chắc ăn vậy anh?" *Tôi đáp:*
"Ừa, nếu như banner đó là banner thứ thiệt, không hề bị thay đổi. Còn chuyện chắc ăn thì chẳng có gì mà chắc ăn đâu em. Mỗi người có thể tìm kết quả mỗi khác trong quá trình thăm dò bởi vì có quá nhiều thông tin và tùy vào đương sự mà phân tích, chọn lọc thông tin nào logic nhất, đáng tin cậy nhất. Nên nhớ rằng thăm dò không phải là 'hack' nha em. 'Thăm dò' là 'thăm dò', là một quá trình tìm tòi, phân tích những dữ kiện có thể lấy được dựa vào những công cụ, phương tiện cho phép.
Quay lại nhận định của 'ccxx' một tí cho trót hả? Em nghĩ thế nào khi em thử telnet vào một server và nó cho em thông tin như sau:
**Code:**
$ telnet www.mydomain.com 80
Trying
www.mydomain.com...
Connected to www.mydomain.com.
Escape character
is '^]'.
HEAD /somefile.txt HTTP/1.0
HTTP/1.1 404 Not Found
Date: Thu, 25 Apr 2004 14:29:46 GMT
Server: Microsoft-IIS/5.0
Connection: close
Content-Type: text/html; charset=iso-8859-1
Connection closed by foreign host.
"
"Dạ thông tin ở đây cho thấy server là một con IIS 5.0, em tin chắc đây là một web server chạy trên hệ điều hành Windows 2000."
"Còn mấy đứa có ý kiến gì khác không vậy?"
"Èm... à.... em nghĩ có cái gì tàng ẩn ở đây hay sao đó. Em cũng nghĩ cái này là một con IIS 5.0, mà đã là IIS 5.0 thì nó chạy trên Windows 2000. Không biết có cái gì ẩn khuất ở đây không nhỉ?"
"Hì hì, thằng Hưng cũng bắt đầu có bịnh hoài nghi rồi. Em cũng nghĩ như Hưng vậy. Tuy nhiên, tự nhiên em cũng hơi hoài nghi vì nếu nó đơn giản và rõ ràng như thế thì anh đưa nó ra làm chi?"
"Chắc chắn là Windows 2000 rồi. Thông tin rõ mười mươi thế kia mà."
"Được rồi, để anh đưa ra thêm một ví dụ khác để tụi em tìm xem có gì đặc biệt không hả? Đây:
*'ccxx' ngẫm nghĩ rồi trả lời:*
"Dạ thông tin ở đây cho thấy server là một con IIS 5.0, em tin chắc đây là một web server chạy trên hệ điều hành Windows 2000."
*Tôi khơi mào:*
"Còn mấy đứa có ý kiến gì khác không vậy?"
*Ba trự kia im lặng khá lâu. Sau đó 'cuti' rụt rè lên tiếng:*
"Èm... à.... em nghĩ có cái gì tàng ẩn ở đây hay sao đó. Em cũng nghĩ cái này là một con IIS 5.0, mà đã là IIS 5.0 thì nó chạy trên Windows 2000. Không biết có cái gì ẩn khuất ở đây không nhỉ?"
*'docco' cũng lên tiếng:*
"Hì hì, thằng Hưng cũng bắt đầu có bịnh hoài nghi rồi. Em cũng nghĩ như Hưng vậy. Tuy nhiên, tự nhiên em cũng hơi hoài nghi vì nếu nó đơn giản và rõ ràng như thế thì anh đưa nó ra làm chi?"
*'haothu' cũng tham gia:*
"Chắc chắn là Windows 2000 rồi. Thông tin rõ mười mươi thế kia mà."
*Tôi không trả lời mà đưa ra thêm một ví dụ khác:*
"Được rồi, để anh đưa ra thêm một ví dụ khác để tụi em tìm xem có gì đặc biệt không hả? Đây:
**Code:**
$ telnet www2.mydomain.com 80
Trying
www2.mydomain.com...
Connected to www2.mydomain.com.
Escape character
is '^]'.
HEAD /somefile.txt HTTP/1.0
HTTP/1.1 404 Object Not Found
Server: Microsoft-IIS/5.0
Date: Thu, 25 Apr 2004 14:35:23 GMT
Content-Length: 460
Content-Type: text/html
Connection closed by foreign host.
"
"Em thấy rõ cái thứ nhì khác cái thứ nhất một chút là cái thứ nhì có thêm Content-Length và Content-Type thì hơi khác một chút vì không có đoạn 'charset=iso-8859-1'. Tại sao chúng lại khác nhau ở mấy điểm này? Chắc chắn chúng là 2 server riêng biệt vì một cái là www.mydomain.com, cái kia là www2.mydomain.com. Em chỉ không hiểu được lý do tại sao chúng khác nhau mặc dù cả hai đều là IIS 5.0."
"Hay là một trong hai server trên có banner giả? Dám lắm đó. Anh đang khai triển việc thay đổi banner phải không nào? Vậy chắc chuyện này có thể lắm."
"Ái chà."
"Đúng rồi."
"Bé Như nhà mình tinh tế lắm. Rõ ràng là mình đang khai thác chuyện thay đổi banner mà. Quả thật một trong hai server trên giả dạng banner đó. Nếu vậy làm sao mình xác định được cái nào thiệt, cái nào giả?"
"Ái chà, thật là lý thú. Em không ngờ đào xới mấy cái HTTP header ở tầng này lại có những điều lý thú đến như vậy. Làm sao mình xác định được cái nào thiệt, cái nào giả bây giờ anh?"
"Hì hì, anh hỏi em, em hỏi lại anh? Cái này để em suy nghĩ trước cái đã. Anh trả lời liền thì mất hay đi. Em tìm cách thử một cái xem nào?"
"A... có rồi, có rồi. Trường mình có một con server chạy Windows 2000 và IIS 5. Cứ thử telnet vào nó và chạy y hệt dòng HEAD như trên ví dụ thì sẽ biết ngay thôi."
"Đúng rồi."
"Ờ hớ."
"Sao mình không nghĩ ra nhỉ? Đúng là đàn bà, con gái tinh tế mấy chuyện này."
"Thằng thứ nhì đúng là thằng IIS 5.0"
"Đúng rồi, chắc chắn server thứ nhì chạy con IIS 5.0 thứ thiệt."
"Hết đường thoát."
"Em đã nói thế."
"Trong hai ví dụ trên, còn có chi tiết nào khác nhau giữa hai server? Chi tiết này hết sức đặc biệt. Bọn em xem thử?"
"Em tìm ra rồi. Cái khác nhau là 'HTTP/1.1 404 Not Found' và 'HTTP/1.1 404 Object Not Found' phải không anh? Server thứ nhất chỉ thông báo là 'không tìm thấy' còn con IIS thì lại thêm chữ 'object' vào trong thông điệp."
"Công nhận bà Như lanh thiệt. Tui cũng vừa tìm ra, chưa kịp nói thì bà đã làm xong rồi."
"Vậy bọn em nghĩ điểm khác nhau mà Như đưa ra có gì quan trọng?"
"Em thấy điểm khác biệt này chẳng ích lợi gì cả. Mấy ông Microsoft hay có thói làm cho khác người vậy thôi à."
"Hứ... cũng là chứng nào tật nấy. Chưa suy nghĩ cho kỹ đã đôm đốp nữa rồi. Trong khuôn khổ 'nhận diện', điểm khác biệt kia hẳn phải có một giá trị nào đó chớ?"
"Èm... thì anh có nói gì đâu à."
"Thôi thôi. 'ccxx' nhận định vậy là chính xác. Điểm khác biệt ở đây giúp chúng ta dễ dàng nhận ra đâu là IIS thật, đâu là IIS giả mạo. Trên *nix, apache thường được dùng làm web service nhất. Những ai rành rõi với chuyện biên dịch thường tải mã nguồn của apache về và sửa lại thông tin của banner trong nguồn. Gần đây, những ai dùng apache còn có thêm mod_security cho phép 'giả' banner nữa. Tuy vậy, có dấu banner vẫn không dấu được những đặc điểm khác. Với ví dụ thứ nhất, mình biết ngay đây là banner 'giả mạo'. Chuyện xác định banner thật của nó là gì là chuyện khác nữa nhưng trước mắt mình có thể xác định phần nào đó hệ điều hành đang chạy web server đó
"Nếu vậy em thấy chuyện giả mạo banner để dấu danh tánh đâu có ích lợi gì cho lắm đâu anh?"
"Bọn em nghĩ sao về nhận định của 'haothu'?"
"Em thấy trước tiên nó đánh lừa được mấy ông kiddie. Đây cũng là chuyện ích lợi."
"Em.... em thì thấy nó có lợi khá nhiều. Ngoài chuyện đánh lừa kiddie, nó có thể đánh lừa được cả đống công cụ dùng để tự động thăm dò hông chừng. Em thấy có khá nhiều công cụ dành riêng cho công tác này, cả thương mại lẫn mã nguồn mở. Ví dụ chương trình tự động kia 'nhìn' thấy dịch vụ là IIS thì nó chỉ dùng các lỗi của IIS có trong database của nó mà... nện. Mà nện thế này thì trật lất hết vì thật sự dịch vụ này đâu phải là IIS. Em thấy đây cũng là một điểm hay."
"Em thấy tùy mức độ kinh nghiệm của kẻ thăm dò. Nếu thăm dò kiểu như anh nói ở đây thì có ma nào mà dấu nổi. Tuy nhiên, em nghĩ là 'cuti' rất có lý với ý kiến dùng nó để lừa các công cụ tự động."
"Hay lắm, ráng 'động não' đều đều hả :). Quả thật, dùng phương pháp thay đổi banner chỉ có thể đánh lừa những người chưa đủ kinh nghiệm và một số tools tự động hoá chưa đủ tinh vi. Tuy vậy, đánh lừa được nhóm 'thăm dò' ở dạng hoàn toàn phó mặc vào công cụ cũng đã là đáng kể vì nhóm này chiếm đa số. Vậy, trên phương diện phòng thủ, liệu mình có nên ứng dụng phương cách 'giả' banner không?"
"Em nghĩ là nên. Lừa được chút nào hay chút đó chớ anh? :)"
"Em nghĩ cũng nên làm nhưng nếu nó không thật sự tác dụng thì không nên quá tốn công sức với nó."
"Đúng rồi. Nếu có thể 'giả' để giảm thiểu những màn thăm dò chung chung thì tại sao không làm? Em nên biết, chỉ có chừng dưới 10% các cú rà tự động được tiếp tục bằng quá trình 'rà' bằng tay để xác định thêm thông tin mục tiêu. Thông thường, quá trình rà tự động chỉ để thu thập một số mục tiêu có thông tin cụ thể mà kẻ thâm nhập muốn tìm. Tuy nhiên, đối với kẻ có quyết tâm thăm dò một mục tiêu cụ thể nào đó thì chuyện 'giả' có lẽ không tác dụng gì mấy.
Bọn em có nghe đến khái niệm
"Em có thấy nhắc đến nhiều nơi nhưng em không đào sâu lắm vì không rõ tác dụng của nó. Nó là gì vậy anh?"
"Ừa,
"Họ làm sao gọi là 'chuộng' vậy anh?"
"À, 'chuộng' ở đây là họ dành nhiều thời gian, công sức để tạo một lớp vỏ 'giả' để đánh lừa kẻ tấn công. Có thể lớp vỏ này làm chậm bước thâm nhập vì kẻ muốn tấn công vì họ mất thời gian xác định thật tính của mục tiêu. Tuy vậy, thiếu bảo mật từ bên trong ra, thiếu bảo mật thật sự thì lớp vỏ này tan vỡ nhanh chóng."
"Em nghĩ là chuyện giả một cái banner đâu có mất thời gian đâu anh?"
"Ừa, đối với mã nguồn mở thì đây là chuyện không mất thời gian cho lắm. Tuy vậy, ít nhất em phải cần thời gian để biên dịch lại software. Đối với software thương mại thì đây là chuyện hoàn toàn khác. Nó dính đến chuyện bản quyền, chuyện giới hạn thay đổi software nên rất phiền phức. Trên mức độ banner thì thế, nhưng chuyện 'đánh lừa' còn đi sâu xuống tcp/ip stack nữa. Họ 'chuộng' phương pháp này đến độ tìm cách thay đổi tcp/ip stack để dấu những đặc tính của các gói tin đi ra / đi vào từ các cổng dịch vụ bởi vì các gói tin này mang những đặc điểm có thể dùng để xác định 'footprint' nữa.
Nếu em chỉ quản lý một vài máy chủ thì có lẽ không quá phiền phức nhưng nếu em phải quản lý cả một hệ thống chằng chịt có nhiều máy chủ, nhiều thiết bị thì sự thể rất khác. Ngay cả em chỉ quản lý một vài máy chủ mà không cẩn thận, tỉ mỉ thì cũng vô ích bởi vì em có thể 'dấu' đầu này nhưng để lộ đầu kia thì cũng chẳng phục vụ được ý định 'dấu'."
"Chà... chuyện phức tạp vậy sao anh? Hoá ra bảo mật cũng có năm bảy đường. Em thấy chuyện 'giả' này có vẻ thú vị lắm."
"Cho em hỏi một chi tiết nha anh? Anh nói là trên *nix người ta thường thay đổi source của apache hay dùng mod_security để giả banner. Vậy trên Windows và dùng IIS thì có phương cách nào tương tự không anh? Em nghĩ IIS thì không thể điều chỉnh mã nguồn rồi đó."
"Chà chà, bộ em cũng muốn theo trường phái 'security through obscurity' sao? :). Trên Windows thì có một số soft. Anh không nhớ chính xác vì anh không 'chuộng' mấy cái này nhưng anh biết Windows có một cái gọi là urlscan. Nó làm việc trên tầng ISAPI của dịch vụ web của IIS và cho phép em 'giả' banner đó. Nếu thích thì vào site của Microsoft mà tham khảo thêm. Anh nghĩ em có thể táy máy đến mấy các dll của inetsrv của Windows để đổi banner nhưng chắc sẽ mất thời gian. Hơn nữa, đã dấu thì dấu cho trót, phải đổi hết trọn bộ error pages của IIS không thì banner một nơi mà error pages một nẻo."
"Anh vừa nói chuyện thay đổi tcp/ip stack để che dấu 'footprint', em thấy cái này lạ ghê. Anh nói rõ hơn một tí được không anh?"
"Ừa, đó cũng là một trong những lý do anh đề nghị bọn em đọc kỹ về tcp/ip lần trước để dễ hình dung hơn đó nhưng mấy anh em mình sa đà ở mức banner nên chưa đề cập đến level này. Chắc chắn mình sẽ đụng đến khoảng đó thôi. Em an tâm."
"OK, nếu mình biết 'thằng' thứ nhất ở trên là giả mạo, làm sao mình xác định được danh tánh thật sự của nó là gì?"
"Ái chà, cái này mới vui á. Em mghĩ chẳng dễ tí nào."
"Em nghĩ chắc phải dùng phương pháp so sánh như kiểu mình so sánh với một IIS server như hồi nãy thôi anh. Anh thấy chuyện này khả thi không?"
"Khả thi chớ sao không em? Em nên nhớ rằng, bước thăm dò bằng tay tuy chậm nhưng nó luôn luôn cho em kết quả xác thực hơn bước thăm dò tự động bằng công cụ nào đó. Vậy, để so sánh thì mình cần có cái gì?"
"Nhất định là mình phải có các bản mẫu 'xịn' rồi cứ dùng cái mình đang thăm dò mà so sánh với bản 'xịn' là xong."
"Vậy mình cần phải thu thập hết các bản mẫu 'xịn' :). Cái này còn gọi là 'footprint database'. Tùy mỗi người có cách lưu trữ và so sánh nhưng điểm cốt lõi là: dù có 'rà' bằng tay hay 'rà' tự động, em phải có một số thông tin mẫu nào đó để làm chuẩn. Nếu không, em không thể so sánh cái mình thấy (từ việc thăm dò) với một cái gì khác cả."
"Vậy mình phải 'thăm dò' hết các loại web server để lấy 'footprint' thứ thiệt để dành hay sao anh? Cực quá vậy? Có database nào có sẵn mấy cái này không anh?"
"Anh nghĩ là có nhưng chưa thấy phổ biến ở bên ngoài như một database bình thường mà nó thuộc một công cụ thăm dò ở dạng mình đang bàn. Bởi vậy, ngay từ đầu anh đã nói: muốn thâm nhập một cách đúng nghĩa, em phải rất kiên nhẫn, phải có căn cơ và phải hiểu mục tiêu của mình là vậy đó."
"Ở đây anh muốn nói đến phương hướng tiếp cận vấn đề chớ không phải cách giải quyết
Với hai ví dụ trên, anh còn muốn nhắc đến một điểm khác rất quan trọng. Bọn em thử copy và paste chúng vào hai cột cạnh nhau để dễ so sánh, dùng soft nào cũng được, cách nào cũng được, miễn sao có thể đặt chúng bên cạnh nhau để so sánh. Chắc chắn em sẽ tìm ra thêm điểm khác nhau nữa."
"Em thấy rồi. Vị trí thứ tự của các HTTP header khác nhau phải không anh?"
"Chính xác. Chúng khác nhau đó. Trước đây anh cũng thắc mắc chuyện này nhưng sau khi xem mấy các RFC cho HTTP thì mới thấy là chẳng có áp đặt cụ thể nào về thứ tự trình bày của các HTTP header cả. Bởi thế, mỗi nơi implement mỗi khác và đây là một điểm đặc thù giúp mình phân tích và phân biệt 'footprint' nữa."
"Sao anh biết được những chi tiết tinh vi và khó thấy như thế vậy anh? Có tài liệu nào đó hướng dẫn mấy chuyện này không anh?"
"Dạ, em cũng thắc mắc như thằng Duy vậy. Em chưa hề thấy ở đâu nói đến những chi tiết lý thú như thế này về chuyện nhận diện 'footprint'."
"Có thể có những tài liệu phân tích những chuyện này. Anh không chắc vì anh chưa hề đọc được cái nào cả. Để trả lời thắc mắc của 'cuti', anh vô tình tìm ra những khác biệt đó trong khi 'táy máy' và test một web application viết bằng java. Application này được deploy trên cả Windows lẫn Unix nhưng có web-tier khác nhau. Trên Windows thì dùng IIS và trên *nix thì dùng Apache và iPlanet (của Sun). Anh phải bắt lấy hết các header của từng loại web server để tạo bộ luật mapping cho cái reverse proxy nên mới thấy được những cái khác nhau kia. Kinh nghiệm xương máu đó! :)"
"Ôi trời, anh 'Việt-hóa' đoạn trên dùm em được không anh? cái gì mà 'web-tier', rồi đến 'deploy', 'mapping', rồi 'reverse proxy'... Em đọc thấy muốn... tẩu hoả luôn :("
"Ái chà... anh cũng chẳng biết phải dịch ra sao nữa. Nếu em có đụng chạm đến các ứng dụng web hạng... nặng thì hẳn sẽ biết được khái niệm 'mutlti-tier' application. Cái này có nghĩa là một ứng dụng có nhiều tầng như: tầng web, tầng logic, tầng dữ liệu (database). Còn chữ 'deploy' thì có nghĩa đại loại như cài đặt, thiết lập một chương trình mới trên một máy chủ. 'deploy' mang nghĩa rộng hơn 'install' (là cài đặt). Riêng 'mapping' thì anh không biết phải dịch ra sao. Nó có nghĩa nhưng là so sánh, biên dịch 2 phía thông tin. Ví dụ, phía A có thông tin là 1 có thể được 'map' thành Z ở phía B chẳng hạn. Chữ 'reverse proxy' có nghĩa là 'proxy ngược'. Người dùng trong LAN muốn truy cập Internet thì đi xuyên qua 'forward proxy', còn người dùng từ Internet muốn vào web server của em thì đi qua 'reverse proxy'. Những khái niệm này khá dễ hiểu, em chịu khó tham khảo thêm trên net."
"Ra vậy. Có quá nhiều kiến thức đi ra từ kinh nghiệm bản thân, trong môi trường làm việc thật sự chớ chẳng phải cái gì cũng có trong sách."
"Đúng thế. Anh đã có lần đề cập trước đây, sách là nguồn thông tin tổng quát. Nó giúp em hình thành một cái 'sườn' của vấn đề. Tùy vào em mà hình thành cái 'ruột'. Những điều mấy anh em mình 'đà khía' ở đây có rất nhiều điều đi từ 'kinh nghiệm xương máu' mà có. Anh biết có những cái lạ lẫm, khó hình dung bởi vì em chưa gặp qua. Tuy nhiên, đến một lúc em đụng phải điều gì đó mình đã bàn ở đây thì tự nhiên sự việc sẽ sáng tỏ, dễ dàng thôi."
"Vậy anh muốn bọn em đi thu thập mấy cái header 'xịn' để làm tư liệu hả anh?"
"Tùy em thôi. Nếu em thấy thích thú chuyện này thì em có thể dành thời gian để đào xới chúng. Anh dám chắc em sẽ thu thập được nhiều điều lý thú. Tuy nhiên, điểm cốt lõi anh muốn bọn em ghi nhận ở đây là điểm khác cơ. Em có biết đó là gì không?"
"Điểm gì cà? Ái chà, căng à nha."
"Anh mổ xẻ chuyện 'footprint' với bọn em rồi để cho bọn em tùy chọn muốn đào thêm hay dừng lại mà không tỏ vẻ quan trọng chuyện này. Vậy chuyện gì quan trọng nhỉ?"
"Em nghĩ là em đoán được. Ý anh là muốn giới thiệu đường hướng và lối khai triển một cách logic phải không ạ?"
"Anh không nói là những chuyện mình vừa bàn không quan trọng. Anh chỉ nói rằng tùy người, tùy nhu cầu mà nó quan trọng nhiều hay ít. 'docco' nói đúng đó, nhưng còn gì nữa?"
"Không biết em nghĩ có đúng không nhưng xem lại mạch chuyện từ nãy giờ, em thấy một điểm khá quan trọng là ngoài tính logic còn có tính tập trung và sự tinh tế trong khi nhận xét vấn đề. Phải không anh?"
"Voila! chính xác. Logic tối cần thiết nhưng tính tập trung và sự tinh tế không thể thiếu được. Sau này, khi em đi đến chỗ viết shellcode, dò stack mà lại thiếu sự tinh tế thì sẽ không thể đạt kết quả được. Đối với 'hacker', mỗi chi tiết bé nhỏ đều có thể mang một giá trị lớn lao. Chúng có thể làm em mất ăn, mất ngủ, mất thời gian để rồi, đến lúc nào đó em sẽ vò đầu và tự rủa mình vì đã 'sót' chúng trong khi phân tích. Thật ra, logic + tập trung + tinh tế là ba đức tính cần thiết không riêng gì trong bảo mật mà nó cần thiết trong các ngành khoa học."
"Em sẵn sàng tiếp nhận quan điểm này. Đừng nói đi đâu xa, những lúc làm bài tập hoặc viết một đoạn code đơn giản mà thiếu tập trung thì có chuyện ngay. Đặc biệt là lúc bị 'có chuyện' mà thiếu tinh tế thì tìm lỗi muốn... khùng luôn."
"Thôi, mấy anh em mình ngồi dính một chỗ đã quá lâu. Có lẽ lần sau mình mới đi vào chi tiết OS 'footprint' trên tcp/ip vì mình bị... 'cháy' kế hoạch rồi. Điều này cũng tốt vì bọn em có thêm thời gian để xem kỹ hơn về tcp/ip. Mấy đứa cũng nên đọc lại nội dung 'đà khía' lần này và ráng đúc kết vấn đề để làm nền cho lần tới."
"Dạ, vậy cũng tốt mà anh. Em vẫn còn lủng củng nhiều điểm trên tcp/ip nên hoãn lại thêm một tí thì tiện hơn."
"Em còn muốn cãi với ông Khoa về chuyện 'kiddie' dùng công cụ khó hay dễ vậy mà anh phải đi rồi. Thôi vậy, để em về chuẩn bị thêm để 'đấu' với ổng một trận. Anh làm trọng tài cho tụi em nha?"
"Ừa, miễn sao 'đấu' để đem lại một kết quả nào đó ích lợi thì anh làm trọng tài liền."
"Em rút kinh nghiệm những lần trước, lần này em sẽ in ra nội dung 'đà khía' để đọc lại và suy gẫm kỹ hơn. Em bị cảm giác là càng ngày càng bị tụt đằng sau."
"Thì tui làm như vậy từ lâu rồi ông Hưng. Chẳng những thế, tập bài tui in ra bây giờ chằng chịt với những dòng gạch dưới, đóng khung, tự chú thích.... tá lã luôn. Không thì không nhớ xuể đâu á."
"Tùy mỗi đứa, tùy cách phân tích và chọn lọc thông tin cho mình thôi. Miễn sao rút tỉa được vài điều là tốt rồi. Nếu không hiểu thì sẽ thấy nặng nề và nếu kéo dài ở tình trạng 'không hiểu' này thì sẽ thì thấy... chán. Cái đó mới là hoài của nói theo lối nói người miền Bắc :). Thôi, anh phải đi. Hẹn mấy đứa tuần sau nếu rảnh."
18/11/2005
<còn tiếp>
*Bộ bốn hoàn toàn im lặng nhiều phút đồng hồ. Hồi lâu, 'docco' lên tiếng:*
"Em thấy rõ cái thứ nhì khác cái thứ nhất một chút là cái thứ nhì có thêm Content-Length và Content-Type thì hơi khác một chút vì không có đoạn 'charset=iso-8859-1'. Tại sao chúng lại khác nhau ở mấy điểm này? Chắc chắn chúng là 2 server riêng biệt vì một cái là www.mydomain.com, cái kia là www2.mydomain.com. Em chỉ không hiểu được lý do tại sao chúng khác nhau mặc dù cả hai đều là IIS 5.0."
*'ccxx' nhận định:*
"Hay là một trong hai server trên có banner giả? Dám lắm đó. Anh đang khai triển việc thay đổi banner phải không nào? Vậy chắc chuyện này có thể lắm."
*'cuti' và 'haothu' cùng cảm thán:*
"Ái chà."
"Đúng rồi."
*Tôi cười, thong thả đáp*
"Bé Như nhà mình tinh tế lắm. Rõ ràng là mình đang khai thác chuyện thay đổi banner mà. Quả thật một trong hai server trên giả dạng banner đó. Nếu vậy làm sao mình xác định được cái nào thiệt, cái nào giả?"
*'docco' xuýt xoa:*
"Ái chà, thật là lý thú. Em không ngờ đào xới mấy cái HTTP header ở tầng này lại có những điều lý thú đến như vậy. Làm sao mình xác định được cái nào thiệt, cái nào giả bây giờ anh?"
*Tôi đáp:*
"Hì hì, anh hỏi em, em hỏi lại anh? Cái này để em suy nghĩ trước cái đã. Anh trả lời liền thì mất hay đi. Em tìm cách thử một cái xem nào?"
*'ccxx' thốt lên:*
"A... có rồi, có rồi. Trường mình có một con server chạy Windows 2000 và IIS 5. Cứ thử telnet vào nó và chạy y hệt dòng HEAD như trên ví dụ thì sẽ biết ngay thôi."
*'cuti', 'haothu', 'docco' đồng cảm thán:*
"Đúng rồi."
"Ờ hớ."
"Sao mình không nghĩ ra nhỉ? Đúng là đàn bà, con gái tinh tế mấy chuyện này."
*Sau vài phút, 'cuti' lên tiếng trước. Quả thật mấy ông đực rựa nhanh nhảu hơn trong chuyện 'động tay, động chân' nhưng lại chậm hơn mấy cô khoản 'nhận xét tinh tế'*
"Thằng thứ nhì đúng là thằng IIS 5.0"
*Tiếp theo đó là 'docco', 'haothu' và 'ccxx' đồng xác nhận:*
"Đúng rồi, chắc chắn server thứ nhì chạy con IIS 5.0 thứ thiệt."
"Hết đường thoát."
"Em đã nói thế."
*và nhiều câu trao đổi khác.* *Cái YIM 'conference' bé nhỏ trở nên rộn rã bằng những câu cảm thán. Tôi hiểu sự rộn rã này không phải tính quan trọng hay mới mẻ của những điều bộ bốn tìm thấy mà ở chỗ chính ở chỗ bộ bốn nhúng tay vào việc quan sát, phân tích, thao tác, so sánh và đúc kết ra được. Tôi lên tiếng:*
"Trong hai ví dụ trên, còn có chi tiết nào khác nhau giữa hai server? Chi tiết này hết sức đặc biệt. Bọn em xem thử?"
*Như tôi dự phỏng, chính 'ccxx' lại tìm ra điểm khác biệt trước tiên trong bộ bốn. 'ccxx' đáp:*
"Em tìm ra rồi. Cái khác nhau là 'HTTP/1.1 404 Not Found' và 'HTTP/1.1 404 Object Not Found' phải không anh? Server thứ nhất chỉ thông báo là 'không tìm thấy' còn con IIS thì lại thêm chữ 'object' vào trong thông điệp."
*'haothu' đáp, vẻ tiếc rẻ:*
"Công nhận bà Như lanh thiệt. Tui cũng vừa tìm ra, chưa kịp nói thì bà đã làm xong rồi."
*Tôi hỏi tiếp:*
"Vậy bọn em nghĩ điểm khác nhau mà Như đưa ra có gì quan trọng?"
*'cuti' láu táu lên tiếng:*
"Em thấy điểm khác biệt này chẳng ích lợi gì cả. Mấy ông Microsoft hay có thói làm cho khác người vậy thôi à."
*'ccxx' nguýt 'cuti':*
"Hứ... cũng là chứng nào tật nấy. Chưa suy nghĩ cho kỹ đã đôm đốp nữa rồi. Trong khuôn khổ 'nhận diện', điểm khác biệt kia hẳn phải có một giá trị nào đó chớ?"
*'cuti' lúng búng với 'ccxx':*
"Èm... thì anh có nói gì đâu à."
*Tôi can gián ngay:*
"Thôi thôi. 'ccxx' nhận định vậy là chính xác. Điểm khác biệt ở đây giúp chúng ta dễ dàng nhận ra đâu là IIS thật, đâu là IIS giả mạo. Trên *nix, apache thường được dùng làm web service nhất. Những ai rành rõi với chuyện biên dịch thường tải mã nguồn của apache về và sửa lại thông tin của banner trong nguồn. Gần đây, những ai dùng apache còn có thêm mod_security cho phép 'giả' banner nữa. Tuy vậy, có dấu banner vẫn không dấu được những đặc điểm khác. Với ví dụ thứ nhất, mình biết ngay đây là banner 'giả mạo'. Chuyện xác định banner thật của nó là gì là chuyện khác nữa nhưng trước mắt mình có thể xác định phần nào đó hệ điều hành đang chạy web server đó
__không hẳn__là Windows 2000. Điều tiếp theo là phải xác định rõ hơn nếu muốn tiếp tục thăm dò." *'haothu' hỏi:*
"Nếu vậy em thấy chuyện giả mạo banner để dấu danh tánh đâu có ích lợi gì cho lắm đâu anh?"
*Tôi cười, hỏi sang 'docco', 'cuti' và 'ccxx':*
"Bọn em nghĩ sao về nhận định của 'haothu'?"
*'docco' trả lời trước:*
"Em thấy trước tiên nó đánh lừa được mấy ông kiddie. Đây cũng là chuyện ích lợi."
*'cuti' ngần ngừ:*
"Em.... em thì thấy nó có lợi khá nhiều. Ngoài chuyện đánh lừa kiddie, nó có thể đánh lừa được cả đống công cụ dùng để tự động thăm dò hông chừng. Em thấy có khá nhiều công cụ dành riêng cho công tác này, cả thương mại lẫn mã nguồn mở. Ví dụ chương trình tự động kia 'nhìn' thấy dịch vụ là IIS thì nó chỉ dùng các lỗi của IIS có trong database của nó mà... nện. Mà nện thế này thì trật lất hết vì thật sự dịch vụ này đâu phải là IIS. Em thấy đây cũng là một điểm hay."
*'ccxx' phát biểu:*
"Em thấy tùy mức độ kinh nghiệm của kẻ thăm dò. Nếu thăm dò kiểu như anh nói ở đây thì có ma nào mà dấu nổi. Tuy nhiên, em nghĩ là 'cuti' rất có lý với ý kiến dùng nó để lừa các công cụ tự động."
*Tôi đáp:*
"Hay lắm, ráng 'động não' đều đều hả :). Quả thật, dùng phương pháp thay đổi banner chỉ có thể đánh lừa những người chưa đủ kinh nghiệm và một số tools tự động hoá chưa đủ tinh vi. Tuy vậy, đánh lừa được nhóm 'thăm dò' ở dạng hoàn toàn phó mặc vào công cụ cũng đã là đáng kể vì nhóm này chiếm đa số. Vậy, trên phương diện phòng thủ, liệu mình có nên ứng dụng phương cách 'giả' banner không?"
*'cuti' đáp:*
"Em nghĩ là nên. Lừa được chút nào hay chút đó chớ anh? :)"
*'docco' lên tiếng:*
"Em nghĩ cũng nên làm nhưng nếu nó không thật sự tác dụng thì không nên quá tốn công sức với nó."
*Tôi đáp:*
"Đúng rồi. Nếu có thể 'giả' để giảm thiểu những màn thăm dò chung chung thì tại sao không làm? Em nên biết, chỉ có chừng dưới 10% các cú rà tự động được tiếp tục bằng quá trình 'rà' bằng tay để xác định thêm thông tin mục tiêu. Thông thường, quá trình rà tự động chỉ để thu thập một số mục tiêu có thông tin cụ thể mà kẻ thâm nhập muốn tìm. Tuy nhiên, đối với kẻ có quyết tâm thăm dò một mục tiêu cụ thể nào đó thì chuyện 'giả' có lẽ không tác dụng gì mấy.
Bọn em có nghe đến khái niệm
**security through obscurity**chưa?" *'docco' đáp:*
"Em có thấy nhắc đến nhiều nơi nhưng em không đào sâu lắm vì không rõ tác dụng của nó. Nó là gì vậy anh?"
*Tôi nói tiếp:*
"Ừa,
**security through obscurity**dịch nôm na ra tiếng Việt là **bảo mật bằng tính bất khả định**. Hay nói một cách khác, vì mục tiêu không được rõ ràng nên nó __có vẻ__bảo mật hơn. Có hẳn một trường phái rất chuộng **security through obscurity**nhưng bản thân anh thì anh không chuộng bởi vì nó thuộc về cái vỏ bên ngoài mà thôi. Đối với những ai thật sự muốn thâm nhập thì cái 'vỏ' này mỏng manh lắm. Nếu có thời gian và điều kiện thì thêm cái vỏ này cũng tốt nhưng nếu chỉ phó mặc vào nó để 'bảo mật' thì rất phiến diện." *'cuti' thắc mắc:*
"Họ làm sao gọi là 'chuộng' vậy anh?"
*Tôi đáp:*
"À, 'chuộng' ở đây là họ dành nhiều thời gian, công sức để tạo một lớp vỏ 'giả' để đánh lừa kẻ tấn công. Có thể lớp vỏ này làm chậm bước thâm nhập vì kẻ muốn tấn công vì họ mất thời gian xác định thật tính của mục tiêu. Tuy vậy, thiếu bảo mật từ bên trong ra, thiếu bảo mật thật sự thì lớp vỏ này tan vỡ nhanh chóng."
*'cuti' hỏi tiếp:*
"Em nghĩ là chuyện giả một cái banner đâu có mất thời gian đâu anh?"
*Tôi đáp:*
"Ừa, đối với mã nguồn mở thì đây là chuyện không mất thời gian cho lắm. Tuy vậy, ít nhất em phải cần thời gian để biên dịch lại software. Đối với software thương mại thì đây là chuyện hoàn toàn khác. Nó dính đến chuyện bản quyền, chuyện giới hạn thay đổi software nên rất phiền phức. Trên mức độ banner thì thế, nhưng chuyện 'đánh lừa' còn đi sâu xuống tcp/ip stack nữa. Họ 'chuộng' phương pháp này đến độ tìm cách thay đổi tcp/ip stack để dấu những đặc tính của các gói tin đi ra / đi vào từ các cổng dịch vụ bởi vì các gói tin này mang những đặc điểm có thể dùng để xác định 'footprint' nữa.
Nếu em chỉ quản lý một vài máy chủ thì có lẽ không quá phiền phức nhưng nếu em phải quản lý cả một hệ thống chằng chịt có nhiều máy chủ, nhiều thiết bị thì sự thể rất khác. Ngay cả em chỉ quản lý một vài máy chủ mà không cẩn thận, tỉ mỉ thì cũng vô ích bởi vì em có thể 'dấu' đầu này nhưng để lộ đầu kia thì cũng chẳng phục vụ được ý định 'dấu'."
*'cuti' cảm thán:*
"Chà... chuyện phức tạp vậy sao anh? Hoá ra bảo mật cũng có năm bảy đường. Em thấy chuyện 'giả' này có vẻ thú vị lắm."
*'docco' xen vào:*
"Cho em hỏi một chi tiết nha anh? Anh nói là trên *nix người ta thường thay đổi source của apache hay dùng mod_security để giả banner. Vậy trên Windows và dùng IIS thì có phương cách nào tương tự không anh? Em nghĩ IIS thì không thể điều chỉnh mã nguồn rồi đó."
*Tôi cười, đáp:*
"Chà chà, bộ em cũng muốn theo trường phái 'security through obscurity' sao? :). Trên Windows thì có một số soft. Anh không nhớ chính xác vì anh không 'chuộng' mấy cái này nhưng anh biết Windows có một cái gọi là urlscan. Nó làm việc trên tầng ISAPI của dịch vụ web của IIS và cho phép em 'giả' banner đó. Nếu thích thì vào site của Microsoft mà tham khảo thêm. Anh nghĩ em có thể táy máy đến mấy các dll của inetsrv của Windows để đổi banner nhưng chắc sẽ mất thời gian. Hơn nữa, đã dấu thì dấu cho trót, phải đổi hết trọn bộ error pages của IIS không thì banner một nơi mà error pages một nẻo."
*'haothu' thắc mắc:*
"Anh vừa nói chuyện thay đổi tcp/ip stack để che dấu 'footprint', em thấy cái này lạ ghê. Anh nói rõ hơn một tí được không anh?"
*Tôi đáp:*
"Ừa, đó cũng là một trong những lý do anh đề nghị bọn em đọc kỹ về tcp/ip lần trước để dễ hình dung hơn đó nhưng mấy anh em mình sa đà ở mức banner nên chưa đề cập đến level này. Chắc chắn mình sẽ đụng đến khoảng đó thôi. Em an tâm."
*Tôi tiếp tục phần đang khai triển ở trên:*
"OK, nếu mình biết 'thằng' thứ nhất ở trên là giả mạo, làm sao mình xác định được danh tánh thật sự của nó là gì?"
*Bộ bốn lại im lặng. Sau vài phút, 'docco' lên tiếng:*
"Ái chà, cái này mới vui á. Em mghĩ chẳng dễ tí nào."
*'haothu' nhận định:*
"Em nghĩ chắc phải dùng phương pháp so sánh như kiểu mình so sánh với một IIS server như hồi nãy thôi anh. Anh thấy chuyện này khả thi không?"
*Tôi đáp:*
"Khả thi chớ sao không em? Em nên nhớ rằng, bước thăm dò bằng tay tuy chậm nhưng nó luôn luôn cho em kết quả xác thực hơn bước thăm dò tự động bằng công cụ nào đó. Vậy, để so sánh thì mình cần có cái gì?"
*'haothu' trả lời:*
"Nhất định là mình phải có các bản mẫu 'xịn' rồi cứ dùng cái mình đang thăm dò mà so sánh với bản 'xịn' là xong."
*Tôi khơi mào:*
"Vậy mình cần phải thu thập hết các bản mẫu 'xịn' :). Cái này còn gọi là 'footprint database'. Tùy mỗi người có cách lưu trữ và so sánh nhưng điểm cốt lõi là: dù có 'rà' bằng tay hay 'rà' tự động, em phải có một số thông tin mẫu nào đó để làm chuẩn. Nếu không, em không thể so sánh cái mình thấy (từ việc thăm dò) với một cái gì khác cả."
*'haothu' hỏi tiếp:*
"Vậy mình phải 'thăm dò' hết các loại web server để lấy 'footprint' thứ thiệt để dành hay sao anh? Cực quá vậy? Có database nào có sẵn mấy cái này không anh?"
*Tôi đáp:*
"Anh nghĩ là có nhưng chưa thấy phổ biến ở bên ngoài như một database bình thường mà nó thuộc một công cụ thăm dò ở dạng mình đang bàn. Bởi vậy, ngay từ đầu anh đã nói: muốn thâm nhập một cách đúng nghĩa, em phải rất kiên nhẫn, phải có căn cơ và phải hiểu mục tiêu của mình là vậy đó."
*Tôi nói tiếp:*
"Ở đây anh muốn nói đến phương hướng tiếp cận vấn đề chớ không phải cách giải quyết
*cụ thể*cho từng trường hợp, từng khúc mắc. Hướng tiếp cận ở đây là: tìm và thu thập các 'footprint' của các web server để làm tư liệu cho việc so sánh về sau. Còn chuyện giải quyết thế nào thì mình đã bàn qua phần nguyên tắc. Anh chỉ 'khơi mào' cho em để khởi động còn muốn chạy xa, chạy nhanh thì tuỳ ở em :).
Với hai ví dụ trên, anh còn muốn nhắc đến một điểm khác rất quan trọng. Bọn em thử copy và paste chúng vào hai cột cạnh nhau để dễ so sánh, dùng soft nào cũng được, cách nào cũng được, miễn sao có thể đặt chúng bên cạnh nhau để so sánh. Chắc chắn em sẽ tìm ra thêm điểm khác nhau nữa."
*Vài phút trôi qua, 'ccxx' lại lên tiếng trước tiên:*
"Em thấy rồi. Vị trí thứ tự của các HTTP header khác nhau phải không anh?"
*Tôi đáp:*
"Chính xác. Chúng khác nhau đó. Trước đây anh cũng thắc mắc chuyện này nhưng sau khi xem mấy các RFC cho HTTP thì mới thấy là chẳng có áp đặt cụ thể nào về thứ tự trình bày của các HTTP header cả. Bởi thế, mỗi nơi implement mỗi khác và đây là một điểm đặc thù giúp mình phân tích và phân biệt 'footprint' nữa."
*'cuti' thắc mắc:*
"Sao anh biết được những chi tiết tinh vi và khó thấy như thế vậy anh? Có tài liệu nào đó hướng dẫn mấy chuyện này không anh?"
*'docco' cũng lên tiếng:*
"Dạ, em cũng thắc mắc như thằng Duy vậy. Em chưa hề thấy ở đâu nói đến những chi tiết lý thú như thế này về chuyện nhận diện 'footprint'."
*Tôi đáp:*
"Có thể có những tài liệu phân tích những chuyện này. Anh không chắc vì anh chưa hề đọc được cái nào cả. Để trả lời thắc mắc của 'cuti', anh vô tình tìm ra những khác biệt đó trong khi 'táy máy' và test một web application viết bằng java. Application này được deploy trên cả Windows lẫn Unix nhưng có web-tier khác nhau. Trên Windows thì dùng IIS và trên *nix thì dùng Apache và iPlanet (của Sun). Anh phải bắt lấy hết các header của từng loại web server để tạo bộ luật mapping cho cái reverse proxy nên mới thấy được những cái khác nhau kia. Kinh nghiệm xương máu đó! :)"
*'haothu' rên rỉ:*
"Ôi trời, anh 'Việt-hóa' đoạn trên dùm em được không anh? cái gì mà 'web-tier', rồi đến 'deploy', 'mapping', rồi 'reverse proxy'... Em đọc thấy muốn... tẩu hoả luôn :("
*Tôi cười, đáp:*
"Ái chà... anh cũng chẳng biết phải dịch ra sao nữa. Nếu em có đụng chạm đến các ứng dụng web hạng... nặng thì hẳn sẽ biết được khái niệm 'mutlti-tier' application. Cái này có nghĩa là một ứng dụng có nhiều tầng như: tầng web, tầng logic, tầng dữ liệu (database). Còn chữ 'deploy' thì có nghĩa đại loại như cài đặt, thiết lập một chương trình mới trên một máy chủ. 'deploy' mang nghĩa rộng hơn 'install' (là cài đặt). Riêng 'mapping' thì anh không biết phải dịch ra sao. Nó có nghĩa nhưng là so sánh, biên dịch 2 phía thông tin. Ví dụ, phía A có thông tin là 1 có thể được 'map' thành Z ở phía B chẳng hạn. Chữ 'reverse proxy' có nghĩa là 'proxy ngược'. Người dùng trong LAN muốn truy cập Internet thì đi xuyên qua 'forward proxy', còn người dùng từ Internet muốn vào web server của em thì đi qua 'reverse proxy'. Những khái niệm này khá dễ hiểu, em chịu khó tham khảo thêm trên net."
*'cuti' nhận xét:*
"Ra vậy. Có quá nhiều kiến thức đi ra từ kinh nghiệm bản thân, trong môi trường làm việc thật sự chớ chẳng phải cái gì cũng có trong sách."
*Tôi đáp:*
"Đúng thế. Anh đã có lần đề cập trước đây, sách là nguồn thông tin tổng quát. Nó giúp em hình thành một cái 'sườn' của vấn đề. Tùy vào em mà hình thành cái 'ruột'. Những điều mấy anh em mình 'đà khía' ở đây có rất nhiều điều đi từ 'kinh nghiệm xương máu' mà có. Anh biết có những cái lạ lẫm, khó hình dung bởi vì em chưa gặp qua. Tuy nhiên, đến một lúc em đụng phải điều gì đó mình đã bàn ở đây thì tự nhiên sự việc sẽ sáng tỏ, dễ dàng thôi."
*'cuti' thắc mắc:*
"Vậy anh muốn bọn em đi thu thập mấy cái header 'xịn' để làm tư liệu hả anh?"
*Tôi đáp:*
"Tùy em thôi. Nếu em thấy thích thú chuyện này thì em có thể dành thời gian để đào xới chúng. Anh dám chắc em sẽ thu thập được nhiều điều lý thú. Tuy nhiên, điểm cốt lõi anh muốn bọn em ghi nhận ở đây là điểm khác cơ. Em có biết đó là gì không?"
*'cuti' đáp:*
"Điểm gì cà? Ái chà, căng à nha."
*'haothu' lên tiếng:*
"Anh mổ xẻ chuyện 'footprint' với bọn em rồi để cho bọn em tùy chọn muốn đào thêm hay dừng lại mà không tỏ vẻ quan trọng chuyện này. Vậy chuyện gì quan trọng nhỉ?"
*'docco' lên tiếng:*
"Em nghĩ là em đoán được. Ý anh là muốn giới thiệu đường hướng và lối khai triển một cách logic phải không ạ?"
*Tôi đáp:*
"Anh không nói là những chuyện mình vừa bàn không quan trọng. Anh chỉ nói rằng tùy người, tùy nhu cầu mà nó quan trọng nhiều hay ít. 'docco' nói đúng đó, nhưng còn gì nữa?"
*'ccxx' cũng tham gia:*
"Không biết em nghĩ có đúng không nhưng xem lại mạch chuyện từ nãy giờ, em thấy một điểm khá quan trọng là ngoài tính logic còn có tính tập trung và sự tinh tế trong khi nhận xét vấn đề. Phải không anh?"
*Hết sức hoan hỉ, tôi đáp:*
"Voila! chính xác. Logic tối cần thiết nhưng tính tập trung và sự tinh tế không thể thiếu được. Sau này, khi em đi đến chỗ viết shellcode, dò stack mà lại thiếu sự tinh tế thì sẽ không thể đạt kết quả được. Đối với 'hacker', mỗi chi tiết bé nhỏ đều có thể mang một giá trị lớn lao. Chúng có thể làm em mất ăn, mất ngủ, mất thời gian để rồi, đến lúc nào đó em sẽ vò đầu và tự rủa mình vì đã 'sót' chúng trong khi phân tích. Thật ra, logic + tập trung + tinh tế là ba đức tính cần thiết không riêng gì trong bảo mật mà nó cần thiết trong các ngành khoa học."
*'docco' nói:*
"Em sẵn sàng tiếp nhận quan điểm này. Đừng nói đi đâu xa, những lúc làm bài tập hoặc viết một đoạn code đơn giản mà thiếu tập trung thì có chuyện ngay. Đặc biệt là lúc bị 'có chuyện' mà thiếu tinh tế thì tìm lỗi muốn... khùng luôn."
*Tôi muốn kết thúc buổi 'đà khía' nên rút ngắn:*
"Thôi, mấy anh em mình ngồi dính một chỗ đã quá lâu. Có lẽ lần sau mình mới đi vào chi tiết OS 'footprint' trên tcp/ip vì mình bị... 'cháy' kế hoạch rồi. Điều này cũng tốt vì bọn em có thêm thời gian để xem kỹ hơn về tcp/ip. Mấy đứa cũng nên đọc lại nội dung 'đà khía' lần này và ráng đúc kết vấn đề để làm nền cho lần tới."
*'docco' đáp:*
"Dạ, vậy cũng tốt mà anh. Em vẫn còn lủng củng nhiều điểm trên tcp/ip nên hoãn lại thêm một tí thì tiện hơn."
*'ccxx' nhấm nhẳng:*
"Em còn muốn cãi với ông Khoa về chuyện 'kiddie' dùng công cụ khó hay dễ vậy mà anh phải đi rồi. Thôi vậy, để em về chuẩn bị thêm để 'đấu' với ổng một trận. Anh làm trọng tài cho tụi em nha?"
*Tôi cười, đáp:*
"Ừa, miễn sao 'đấu' để đem lại một kết quả nào đó ích lợi thì anh làm trọng tài liền."
*'cuti' phát biểu:*
"Em rút kinh nghiệm những lần trước, lần này em sẽ in ra nội dung 'đà khía' để đọc lại và suy gẫm kỹ hơn. Em bị cảm giác là càng ngày càng bị tụt đằng sau."
*'docco' đáp:*
"Thì tui làm như vậy từ lâu rồi ông Hưng. Chẳng những thế, tập bài tui in ra bây giờ chằng chịt với những dòng gạch dưới, đóng khung, tự chú thích.... tá lã luôn. Không thì không nhớ xuể đâu á."
*Tôi trả lời:*
"Tùy mỗi đứa, tùy cách phân tích và chọn lọc thông tin cho mình thôi. Miễn sao rút tỉa được vài điều là tốt rồi. Nếu không hiểu thì sẽ thấy nặng nề và nếu kéo dài ở tình trạng 'không hiểu' này thì sẽ thì thấy... chán. Cái đó mới là hoài của nói theo lối nói người miền Bắc :). Thôi, anh phải đi. Hẹn mấy đứa tuần sau nếu rảnh."
*và tôi logoff.*.
18/11/2005
<còn tiếp>

X-XSS-Protection: 1; mode=block

Server: GSE

X-Content-Type-Options: nosniff