Chủ Nhật, 3 tháng 7, 2022

Ba năm làm việc trong ngành An toàn thông tin, tôi nhìn thấy gì?

Những ngày này, vào cái tiết trời hè “mát dịu”, những tia nắng khẽ nhảy nhót qua những tán lá xanh rì, báo hiệu cho một mùa tuyển sinh đầy những sai lầm sắp diễn ra. Nhân dịp các cháu thí sinh sắp phải lựa chọn quyết định sáng suốt cho cả cuộc đời của mình, bản thân nhận thấy là một người chú dễ thương và hơi lắm mồm, sẽ chia sẻ lại một chút trải nghiệm làm việc trong ngành An toàn thông tin. Mục đích của việc chia sẻ thật ra là để bạn đọc hiểu làm An toàn thông tin lợi hại ra sao, thú vị thế nào.
Về bản thân tôi
Về bản thân tôi - kỹ sư An toàn thông tin - từng có gần 3 năm làm việc trong ngành An toàn thông tin tại một công ty nhỏ nhưng xuất hiện khá sớm trong ngành này tại Việt Nam. Tại đây tôi may mắn được tham gia vào khá nhiều hoạt động, từ việc tư vấn, triển khai tới nghiên cứu và định hướng phát triển một số sản phẩm An ninh thông tin phục vụ nhu cầu nội địa. Có lẽ cũng chính nhờ sự may mắn đó, tôi được va chạm rất nhiều, gặp nhiều người anh em rất giỏi, hoặc những người có đôi chút tầm ảnh hưởng. Bên cạnh đó, vào thời gian trên giảng đường tôi có tham gia một số hoạt động liên quan đến nghiên cứu, do dó được tiếp xúc với một số thạc sĩ, tiến sĩ và giáo sư trong ngành (tuy nhiên chưa phải là đầu ngành). Nhìn chung, trong ngành này tôi có thể tự tin nhận định rằng tôi có hiểu đôi chút.
An toàn thông tin là một ngành nghề thử thách
Trên màn ảnh, hình ảnh của các hacker như Mr.Robot, Cao Thanh Lâm hay Edward Snowden có lẽ được xây dựng một cách quá tuyệt vời. Họ sống hai cuộc sống, một cuộc sống nhẹ nhàng vào buổi sáng, chẳng hạn như làm nhân viên văn phòng - sáng đến bật máy tính, trưa đi hút thuốc lào, ngày code nhẹ nhàng 300 dòng. Màn đêm buông xuống, họ có một cuộc sống khác, dùng kỹ năng siêu phàm của mình để cứu thế giới. Bằng một cách nào đó, hình ảnh anh coder nặng 40kg, mắt thâm quầng vì hay thức đêm, môi thâm vì suốt ngày hút thuốc hay mặt áo T-shirt 3 ngày chưa giặt được tái hiện ngầu lòi, đậm chất “thơ”.
Nhiều anh em khi tôi được dịp tiếp xúc cũng có chia sẻ rằng vì ấn tượng với hình ảnh đó mà chọn nghề này. Thực tế có lẽ hơi khác... Để bạn đọc có cái nhìn rõ hơn thì tôi xin phép tổng hợp một chút. Nghề An toàn thông tin ở Việt Nam được chia thành một số ngạch như sau:
- Làm dịch vụ tư vấn, đánh giá: Thường sẽ phải di chuyển để gặp khách hàng. Sau đó lắng nghe vấn đề của khách hàng, tìm hiểu và tư vấn cho khách hàng phương án để cải thiện những vấn đề, nhu cầu,… của họ. Loại này ở Việt Nam thường sẽ chuyển hoá thành tư vấn, đánh giá để bán giải pháp (hay còn gọi là “Cò”).
- Làm sản phẩm liên quan đến ATTT: Thường phụ trách một vài dòng sản phẩm, có thể là từ nước ngoài hoặc tự phát triển. Công việc chính là thiết kế, triển khai hoặc có thể nghiên cứu thêm tính năng để đưa vào sản phẩm tự phát triển. Loại này ở Việt Nam tương đối phát triển.
Đối với các công ty phân phối sản phẩm của nước ngoài thường các dự án dễ lặp đi lặp lại gây ra sự nhàm chán, hoặc gặp khách hàng dở hơi sẽ gây ra nhiều áp lực. Mặt khác, đối với việc tự phát triển sản phẩm, hầu hết sẽ dựa trên các mã nguồn mở, công việc sẽ liên quan đến coding nhiều hơn.
- Làm nhân viên kiểm thử (Pentester): Loại này có lẽ là nghe thú vị nhất. Bạn sẽ đóng vai một anh hacker thật sự để đi tìm lỗ hổng trong hệ thống của khách hàng, sau đó viết báo cáo và gửi lại cho họ. Ở lĩnh vực này bạn sẽ dễ bắt gặp các “pro” trong ngành, tuy nhiên họ chiếm tỉ lệ rất ít. Nhìn chung nếu chỉ làm ở tầm trung bình trở xuống, công việc này sẽ chú trọng đến quy trình và báo cáo hơn là “hack”.
- Làm giám sát, vận hành hệ thống (SysOps, NOC/SOC, SysAdmin, …): Nhìn màn hình 24/7 để phát hiện sự cố hoặc thiết kế, triển khai, tích hợp các giải pháp. Giám sát thi thoảng gặp sự cố thì vui còn không thì nhìn chung hơi buồn ngủ. Nhìn chung cần hiểu biết về hạ tầng và đôi khi công việc hơi “low level”.
- Chuyên viên điều tra/khắc phục sự cố: Ít khi cần. Trừ những vụ lớn và mới như VNA, sau này các vụ tấn công nghiêm trọng đã có đơn vị công phụ trách quản lý và hỗ trợ. Các vụ tấn công nhỏ thì … “để em điều tra thêm rồi báo lại bên anh nhé” =))
Để làm việc trong ngành này, cần nhiều nỗ lực hơn, sở thích thôi thì chưa đủ. Tất cả những công việc tôi liệt kê ở trên, đều đòi hỏi một lượng kiến thức khổng lồ liên quan đến máy tính, mạng máy tính, phần mềm,… bên cạnh đó không thể thiếu được kiến thức thực tế. Hầu hết sinh viên ngành An toàn thông tin ra trường đều phải tiếp tục học tập ở một doanh nghiệp trước khi đạt độ chín trong nghề.
Nhìn sang ngành công nghiệp phần mềm, sự chủ động và chuyên sâu trong kiến thức là rõ rệt hơn cả. Kỹ sư công nghệ thông tin có thể sẽ chuyên sâu về một mảng, một công nghệ mà vẫn đáp ứng tốt yêu cầu công việc.
Tuy nhiên, thử thách cũng đi kèm sự thú vị..
An toàn thông tin luôn luôn là good to have
Sử dụng dịch vụ, sản phẩm an toàn thông tin giống như việc thuê vệ sĩ. Khi nào thì cần thuê vệ sĩ? Khi bạn giàu vãi, hoặc khi bạn lo sợ. Đôi khi đi “cò” sản phẩm an toàn thông tin cũng giống như đi gieo rắc nỗi sợ hãi cho khách hàng. Còn đi tìm khách hàng thì cứ thấy ông nào giàu thì tiếp cận (đôi khi là tìm ông nào cần “giải ngân”, ahihi)
Nhưng trên tất cả, An toàn thông tin luôn luôn đi sau ngành khác. Điều này dễ hiểu thôi vì phải có đối tượng, có tài sản thì mới nghĩ đến chuyện bảo vệ chúng. Do đó, dẫu vào năm gần đây ngành An toàn thông tin cực kỳ khởi sắc, những xét trên phương diện chung vẫn chưa thể bứt phá và đạt được vị thế xứng đáng.
Hãy đề phòng, vì bạn rất dễ trở nên bảo thủ
Làm ngành này đôi khi bạn cần phải nguyên tắc. Một phát biểu phổ biến trong ngành này đại loại là “Con người là mắt xích yếu nhất trong việc đảm bảo an toàn thông tin của hệ thống”. Để giảm thiểu rủi ro, người ta cố gắng áp đặt thật nhiều chính sách để hạn chế tối đa nguy cơ.
Ví dụ đơn giản như T**, ngân hàng với chủ trương đi đầu về công nghệ. Mật khẩu hết hạn sau 3 tháng sử dụng, chỉ được đặt mật khẩu từ 6-8 kí tự, phải bao gồm chữ thường, chữ hoa và chữ số. An toàn, nhưng hơi phiền…
Bên cạnh đó, việc thay đổi thành phần trong hệ thống cũng ít khi xảy ra hơn so với môi trường công nghệ thông tin. Giả sử như khi đáp ứng lượng người dùng lớn, bạn cần nâng cấp, thay thế giải pháp công nghệ thông tin, nhưng chưa chắc đã nâng cấp giải pháp đảm bảo an toàn. Dù security news rất nhiều, thậm chí là từng giờ, từng ngày, nhưng nhìn chung về mặt phương pháp mà nói thì không có cải tiến thường xuyên.
Một số anh em khi làm an toàn thông tin lâu có biểu hiện bảo thủ, không chấp nhận cái mới, nhìn đâu cũng thấy rủi ro và chỉ ưa dùng những công nghệ cũ… rất khó để làm việc cùng nhau.
Và lời kết
Liệt kê hơi dài nhưng nói chung là làm An toàn thông tin thì vui nhưng cày cuốc hơi nhiều. Tương lai của ngành này đối với tôi - một anh cựu coder phụ trách phát triển sản phẩm nội địa - luôn luôn là dấu hỏi. Nhận thấy bản thân đã có tuổi, thời gian làm nghề không còn nhiều, ghế ngồi cũng đã lâu nên quyết định dứt áo ra đi tìm miền đất mới (sau này mới biết là lên mây).
Nếu bạn muốn tham gia vào ngành này, hãy chuẩn bị cho mình:
- Tư duy out-of-the-box
- Sẵn sàng học hỏi mọi thứ
- Kỹ năng trình bày vấn đề
- Một chiếc bụng thật khoẻ để uống được nhiều bia :D
- Quen với việc làm dự án nhà nước (nếu ở công ty Việt Nam, ahihi)

Thứ Sáu, 20 tháng 12, 2019

Hà nội những ngày gió mùa.

sáng ngày gió mùa, nắng dựng tôi dậy. dạo ấy nắng nhạt, len lỏi qua ô cửa sổ, nằm cạnh tôi. nắng biết tôi mê man trong cơn gió mùa. những ngày gió mùa ở Hà nội, cách đây chỉ một năm thôi, là những ngày đầy đọa, những ngày ôm vội tấm áo, những này nâng niu nắng, chỉ chờ nắng xuống để ôm vào lòng.
ấy vậy mà năm nay, tôi lại thích gió mùa...
tôi chờ gió mùa trên những cánh hoa đẹp, tôi chờ gió gợn mặt hồ. tôi đắm chìm trong những nơi hay ho mà tôi mơ mộng. tôi quên mất, tôi quên mất nắng.
thi thoảng tôi thấy nắng đổ xuống kẽ lá trên đường Phan Đình Phùng.
thi thoảng nắng gọi tôi ở ngoài cửa sổ.
có hôm gặng mình, nắng hỏi tôi:
- sao anh không gặp nắng?
tôi thẹn mình quay đi.
trong những ngày ở Hà nội, những ngày gió mùa, tôi chẳng màng tới nắng. nắng nhạt dần, rồi tắt hẳn... nắng nên như thế. Khi ở vùng đất này là mùa đông lạnh lẽo. Bên kia quả đất, người ta hân hoan đón nắng.
nắng đi. tôi toan đuổi theo trong những chiêm bao về ngày nắng đẹp, rơi
nắng rơi
mưa bắt đầu rơi, gió mùa làm tôi thoáng man mác mà nhận ra rằng
vì anh lỡ thích Hà nội những ngày gió mùa.
vội vã
tôi đi về những ngày đông.

Thứ Năm, 25 tháng 10, 2018

[Algorithm] Phương pháp sắp xếp mới, mà tôi gọi là Domain Sorting.

Tựa:
    Sắp xếp xưa nay là một vấn đề hoàn toàn không mới mẻ và đã có rất nhiều thuật toán về sắp xếp từ đơn giản đến phức tạp như sắp xếp nổi bọt, sắp xếp chèn, sắp xếp trộn, sắp xếp nhanh... Tuy nhiên, dữ liệu ở đời thực quả thật thú vị khi chúng luôn ngẫu nhiên và sự ngẫu nhiên này giá trị ở chỗ chúng luôn có khoảng tăng và giảm nhất định, mà các phương pháp sắp xếp cổ điển chưa tận dụng được. Vậy nên tôi nghĩ ra phương pháp sắp xếp theo miền.

Chi tiết:
    Trước tiên ta xuất phát từ một số bài toán nhỏ như sau, với định nghĩa "miền" là một dải giá trị liên tục đơn điệu tăng  [a,b] với a,b được gọi là "bao miền":

           Cho trước 2 miền giao nhau [a,b] và [c,d], làm thế nào để trộn hai miền này để thu được miền [a,d]?

           Nhận xét 1: Nếu a=b và |[c,d]|<=2 việc trộn miền chỉ đơn thuần là so sánh a với hai bao miền còn lại, rồi tìm cách đặt a vào miền đó.
           Nhận xét 2: Nếu [a,b]={a,[g,h],b} thuộc [c,d], việc trộn với độ phức tạp O(n), được thực hiện như sau: Giả sử [c,d]={c1,...,cn,{e,[i,k],f},dn,..,d1}, với [e,f] và [a,b] là hai miền giao nhau hoặc bao nhau, ta trộn miền [a] và miền [c1,e] theo Nhận xét 1, tương tự với b. Sau đó tiếp tục trộn miền [i,k] và miền con [g,h] của [a,b] vào nhau.
           Nhận xét 3: Nếu 2 miền giao nhau, ta tách thành 3 miền, và chỉ xử lý phần giao nhau.
           Nhận xét 4: Với một dãy các miền không giao nhau, ta trộn 2 miền kề nhau đôi một, sau đó lặp lại cho đến khi chỉ còn 1 miền, nếu gặp 2 miền giao nhau ta lại làm mịn tiếp.

          Dựa trên những nhận xét trên, ta có sắp xếp miền với tư tưởng đệ quy. Ví dụ:
                                  1  5  7   3   6   7   3   2   6   9   4   2   10
                                 [1  5  7]  [3  6   7]  [3  2]  [6  9]  [4   2] [10]   (đây là các khoảng tăng giảm)
                                 [1  5  7]  [3  6   7]  [2  3]  [6  9]  [2   4] [10]   (lật thành toàn bộ tăng)
                                 [1  [5]--[3  6  7]  7]   [2   3   6   9]  [2  4  10]   (trộn miền 1-2, 3-4, 5-6)
                                 [1  [3  [5]   6   7]  7]   [2  3  6   9]  [2  4  10]    (trộn miền con của 1-2)
                                 [1   3   5    6   7    7]   [2   3  6   9]  [2   4   10]
                                 [1  [2   3   6   9]--[3   5   6  7  7] ]  [2   4  10]   (trộn miền 1-2)
                                 [1  2   3   [6]--[3  5  6   7   7]  9]  [2  4   10]     (trộn miền con của 1-2)
                                 [1  2   3    3   5   [6]--[6]  7  7   9]  [2  4  10]
                                 [1  2   3    3   5   6   6  7  7   9]  [2  4  10]
                                 [1  2   [3   3   5   6   6   7   7  9]--[2  4  10] ]
                                 [1  2   2   [4]--[3   3   5   6   6   7   7  9]  10]
                                 [1  2   2   3   3  [4]  5   6  6  7  7  9  10]
                                 [1  2   2   3   3  4  5   6  6  7  7  9  10]               xong!

Tóm lại:
         Trên đây là những bước triển khai rất sơ sài về một phương pháp sắp xếp cảu tôi, có lẽ bạn đang thắc mắc tại sao tôi viết loằng ngoằng ra vài dòng sau đó vứt đấy, thì tôi xin điều trần rằng:
          - Thuật toán tuy mới nhưng khi nhìn lại và suy ngẫm, tôi cho rằng nó chẳng có gì thú vị. Thậm chí nếu nhìn sâu ra thì đệch mợ, nó na ná merge sort cải tiến. Thế mới cay!
          - Về độ phức tạp, nó không tốt hơn các loại sort đang thông dụng, tôi ước chừng cũng rơi vào khoảng NlogN nếu gặp case xấu, tức là ngang merge sort nếu vào case xấu, cụ thể là khi các dãy tăng đơn điệu có độ dài bằng nhau và bằng 2. Tôi sẽ kiểm chứng lại sau!...
         Cuối cùng thì vẫn sướng sướng vì nghĩ ra cái gì đó, hi vọng một ngày nào đó tôi tìm ra cái gì mới hơn ở trong bài viết này. Cheer!

Thứ Sáu, 30 tháng 3, 2018

[Toán] Chứng minh Fermat nhỏ bằng sơ cấp

Ta vốn biết các chứng minh liên quan đến nhóm cylic Z/n và phi hàm Euler. Nhưng với sơ cấp thì sao.
Fermat nhỏ được phát biểu như sau:
"Định lý nhỏ của Fermat khẳng định rằng nếu  là một số nguyên tố, thì với số nguyên  bất kỳ,  sẽ chia hết cho ."
 Xuất phát từ khai triển của nhị thức Newton ta có
Dễ dàng thấy rằng nếu n nguyên tố  chia hết cho n (với mọi n). Vậy nên
Nên 
Sau a lần ta được