Featured Post

Có một Biển Đông trên không gian mạng

Có một Biển Đông trên không gian mạng Thái Dương Mùa hè 2014, giữa lúc người Việt trong nước và hải ngoại đang sôi sục vì Trung Quốc đư...

Thursday, February 27, 2014

Về khóa học Cyber Security trên Coursera

Tôi nhận được email sau đây về khóa học Cyber Security của Coursera:
Em tên là T., hiện đang là sinh viên. Trước đây em từng có được nói chuyện với anh vài lần trên Y! messenger, nhờ anh động viên và hướng dẫn mà em đã dần dần hiểu và chịu khó hơn trong việc học IT của mình + Đã thu lượm được vài skills nho nhỏ trong làm việc với Linux.
Tầm năm 2012, nhờ bài viết trên Blog vnhacker của anh mà em biết được về khóa học cryptography của thầy Dan Boneh trên Coursera và đã đăng ký học ngay trong iteration đầu tiên + đạt kết quả rất tốt. Tiếc là sau khi xong Cryptography I, thầy Dan Boneh hình như không có thời gian nên Crypgoraphy II cứ bị đẩy lùi dần mà chưa bao giờ biết mới chính thức được học.
Hôm vừa rồi, em mới đọc được trên Coursera thông tin về khóa học Cyber Security của University of Maryland. Khóa học này gồn 4 môn + 1 project cuối cùng, cái nào cũng thuộc dạng trả tiền + có chứng chỉ "xịn" của University of Maryland cả. Em nghĩ đây là 1 khóa học hay và bổ ích.
Anh Thái có thể tham khảo thêm thông tin về khóa học đó tại link dưới đây.
https://www.coursera.org/specialization/cybersecurity/7 
Nếu anh Thái thấy có thể được, em muốn nhờ anh đăng thông tin về khóa học này trên Blog của anh để giới thiệu thêm cho mọi người. Em cảm ơn anh rất nhiều.
--

Tất cả các môn đều có thể theo học miễn phí, nhưng nếu muốn được cấp chứng chỉ thì trả thêm 50 USD, tổng cộng 4 lớp và 1 môn bài tập lớn là 245 USD, có lẽ cũng ngang ngửa với học phí một năm ở một trường đại học Việt Nam và rất rẻ so với Stanford. Chưa bằng 1/20 so với số tiền mà Google sẽ trả cho một lỗi XSS!

Tôi thích cái sườn chương trình này. Người dạy crypto là Jonathan Katz, đồng tác giả cuốn K&L, một cuốn sách rất tốt, được dùng làm sách giáo khoa ở nhiều đại học lớn trên thế giới. Tôi thấy thích thú khi Usable Security là một trong những môn học chính. Tôi chẳng biết gì về Hardware Security nên chắc sẽ đăng ký học môn này.

Tuesday, February 11, 2014

Thông tin liên lạc

Tóm gọn: tôi chỉ dùng email (thaidn@gmail.com) và Google Talk (sau này là Google Hangouts) để liên lạc với người khác. Ngoài ra thì tôi không dùng bất kỳ phần mềm và dịch vụ nào khác.

Hôm nay tôi mới phát hiện tôi có một điểm giống với Hoa hậu Mai Phương Thúy, người đẹp Ngọc Trinh, và cả Đàm Vĩnh Hưng: tôi cũng có tài khoản Facebook giả :-).

Ai đó đã tạo cho tôi một tài khoản ở địa chỉ www.facebook.com/supertramp101. Đây không phải lần đầu, bạn tôi có báo cho tôi một trang tương tự cách đây vài tuần, có lẽ là do cùng một người tạo ra.

Tài khoản này không phải của tôi. Tôi không có ý định tham gia Facebook trong tương lai gần. Nếu ai đó đã lỡ kết nối với người này thì nên cắt. Nếu ai thấy người nào khác mang tên tôi và dùng hình ảnh của tôi trên Facebook thì làm ơn báo lại cho tôi biết.

Xin cảm ơn và mời tham gia Google Plus (just kidding :-).

Tài khoản trên Google Plus là của tôi, nhưng tôi tạo nó vì lý do công việc và muốn sử dụng Hangouts chứ tôi cũng không có ý định tham gia vào mạng xã hội đó. Hồi trước tôi cũng có xài Twitter ở địa chỉ http://twitter.com/thaidn, nhưng sau này tôi bỏ đi và bây giờ tài khoản đó là của một người khác. Ngoài hai cái này ra tôi còn một tài khoản ở LinkedIn và vài nơi linh tinh khác.

Nhưng tôi không dùng bất kỳ công cụ liên lạc nào khác ngoài email và Google Talk. Email vẫn có thể giả mạo, nên sắp tới tôi sẽ ký các email mà tôi gửi đi. Còn Google Talk thì hi vọng là không ai vào được tài khoản đó của tôi.

Monday, February 10, 2014

Lập trình máy kỳ dị

Đồng nghiệp cũ của tôi ở Matasano mới làm một cái game rất thú vị, bạn nào muốn luyện kỹ năng dịch ngược mã và khai thác lỗi bộ nhớ thì nên xem: microcorruption.com.

Lâu lắm rồi tôi mới chơi game dạng này. Hồi trước tôi hay chơi CTF, nhưng mà CTF thường đòi hỏi phải tập trung liên tục trong vài ngày. Có lần tôi chơi liên tục ba ngày hai đêm, ngủ luôn ở công ty, sáng dậy thì đi bộ ra ăn hủ tíu gõ xong về chơi tiếp. Không tắm! Bây giờ thì không làm vậy được nữa. Với lại CTF nhiều khi đòi hỏi phải có những công cụ hay setup mà tôi không có sẵn, nên dần dà tôi cũng không còn mặn mà lắm.

Micro Corruption hay ở chỗ chỉ cần browser là chơi được và muốn chơi lúc nào cũng được. Mỗi ngày tôi chơi 1-2 tiếng, khi nào chán thì thôi, không phải chạy đua thời gian nên khá là thư giãn. Điều mà tôi thích nhất là game này có nhiều màn, bắt đầu từ rất dễ, mãi về sau mới có những mức khó hơn, thành ra mình có thể vừa chơi vừa học. Tôi thích những game mà tôi có thể học được gì đó, hơn là những game đánh đố, khó nhưng không hay.

Tôi chơi hổm rày thì thấy những màn đầu chỉ cần kiến thức cơ bản về cấu trúc máy tính và cách tổ chức bộ nhớ của một tiến trình là có thể làm được. Sau đó sẽ có những màn đòi hỏi phải biết cách khai thác lỗi hỏng bộ nhớ trên stack, trên heap, lỗi tràn số nguyên hay lỗi format string. Những màn gần cuối sẽ có thêm những trở ngại phải vượt qua như DEPASLRshellcode chỉ được chứa ký tự alphabet, v.v Nhìn chung là tất cả những hướng tấn công mà chúng ta biết đến, cách phòng chống thông thường và cách vượt qua chúng đều được đưa vào game.

Chơi game này dễ ghiền, vì nó cho ta cảm giác ta có thể kiểm soát tất cả mọi thứ. Tôi nghĩ đây cũng là điều làm cho ngành security, mà đặc biệt là lĩnh vực khai thác lỗi phần mềm, trở nên cực kỳ hấp dẫn. Bạn lấy một chương trình, chẳng cần mã nguồn, mở tung nó ra để rồi hiểu nó còn hơn cả người viết ra nó. Bạn chạy chương trình, gửi cho nó một đoạn dữ liệu và ngay lập tức kiểm soát được lệnh tiếp theo mà chương trình sẽ chạy. Nhưng mọi chuyện chưa dừng ở đây, mà cuộc vui thật sự chỉ mới bắt đầu.

Bạn cần phải lập trình lại chương trình ban đầu. Ví dụ như khi dùng Mobile Safari trên một số phiên bản iPhone để truy cập vào www.jailbreakme.com thì Safari không còn là trình duyệt nữa, mà trở thành công cụ jailbreak tự động. Bản thân Safari không thể làm việc này, nhưng nó đã được comex lập trình lại. Vào năm 2010 Safari cũng đã từng được lập trình lại để tải hết tin nhắn SMS lên một máy chủ. Chrome cũng không thoát khỏi số phận bị lập trình lại, mặc cho các kỹ sư Google đã dày công bày binh bố trận bảo vệ.

Rõ ràng lập trình lại một chương trình đang chạy không phải là chuyện đơn giản. Bạn cần phải biết (một phần) trạng thái của chương trình: giá trị của các register, trên stack và heap đang có những gì, các biến toàn cục và cục bộ đang có giá trị gì, v.v. rồi bắt chương trình chạy lệnh theo ý mình và chuyển qua một trạng thái tiếp theo. Nhưng nhập lệnh gì và như thế nào?

Một ví dụ cơ bản: bạn muốn gọi một hàm và truyền vào cho nó một chuỗi (ví dụ như gọi hàm system, truyền vào con trỏ đến chuỗi /bin/sh để lấy shell), nhưng tại thời điểm bạn kiểm soát được chương trình thì stack trông như thế này:


Bạn kiểm soát được nội dung những ô màu xanh, nhưng không kiểm soát được ô màu trắng. Nói cách khác bạn cần phải chạy được những lệnh để chuyển con trỏ stack (esp) về vùng nhớ mà bạn kiểm soát được. Có nhiều cách để làm được việc này - một cách đơn giản là trỏ eip (con trỏ chứa địa chỉ dòng lệnh tiếp theo của chương trình) vào một đoạn chương trình có nội dung là

pop
pop
pop
ret

Mỗi lệnh pop sẽ chuyển esp lên một ô, ba lệnh pop sẽ chuyển esp lên ô màu xanh đầu tiên, lệnh ret sẽ lấy giá trị của ô này gán cho eip. Nhưng đoạn "pop, pop, pop, ret" ở đâu ra? Bạn có thể nhập vào, hoặc hay hơn là sử dụng lại chính mã của chương trình mà bạn đang muốn kiểm soát. Kỹ thuật này đã được sử dụng từ rất lâu và gần đây được gọi là return-oriented programming. Ở Việt Nam có mấy anh ở VNSECURITY là chuyên gia trong lĩnh vực này.

Tựu trung lại thì cái máy mà bạn cần phải lập trình rất dị thường: trạng thái đầu vào, dữ liệu có thể nhập vô, định dạng của chúng, trạng thái đầu ra, tập lệnh có thể chạy được, v.v. tất cả những thông tin mà bình thường bạn sẽ biết có thể sẽ rất mù mờ và chính bạn phải lần mò tìm ra chúng bằng cách dịch ngược mã chương trình. Có khi một phần chương trình mục tiêu cũng bị che đi và bạn phải dùng một lỗi ở phần chương trình đã biết để tải về mã của phần chương trình chưa biết. Trong mớ bòng bong này, bạn phải khiến chương trình làm được một việc gì đó hữu ích cho bạn! Chào mừng đến với nghệ thuật lập trình máy kỳ dị.

--

Tôi nghĩ dùng Micro Corruption làm giáo trình dạy kiến trúc máy tính thì hay tuyệt. Nếu mấy anh ở Matasano đồng ý, tôi sẽ thu xếp dùng cái này để mở một lớp trực tuyến miễn phí về kiến trúc máy tính và khai thác lỗi phần mềm. Sách để đọc là cuốn Computer Systems: A Programmer's Perspective mà tôi đã có giới thiệu trước đây. Tôi sẽ thông báo khi nào chuẩn bị xong.