26 Jan, 2021
Vấn đề an ninh máy tính
Ngày nay, an ninh máy tính là khu vực tăng trưởng nhanh nhất trong công nghiệp phần mềm. Với nhiều hacker hơn, nhiều tấn công xi be, tội phạm xi be, vi rút máy tính, gián điệp công nghiệp, ăn cắp căn cước, và lừa gạt, an ninh trở thành quan trọng hơn bao giờ. Khi hệ thống công nghệ thông tin (CNTT) trở nên lớn hơn và phức tạp hơn, chúng yêu cầu nhiều hệ thống an ninh phức tạp hơn.
Ngược với nhiều tin tưởng, an ninh KHÔNG phải là sản phẩm bạn có thể mua được và thêm vào cho hệ thống. Nó phải là một phần tích hợp của hệ thống khi hệ thống được xây dựng. Tất nhiên, bạn có thể sửa các lỗi an ninh sau khi hệ thống được xây dựng nhưng điều đó sẽ tốn kém cho bạn nhiều hơn và không ai có thể đảm bảo rằng mọi lỗi được sửa hết. An ninh của hệ thống CNTT phụ thuộc vào thiết kế của hệ thống cho nên điều tốt nhất là xây dựng an ninh khi bạn thiết kế hệ thống. Vấn đề là bao nhiêu sinh viên được dạy về an ninh trong môn thiết kế? Bao nhiêu trường có môn an ninh trong chương trình giảng dạy? Ngay cả trong môn lập trình, bao nhiêu sinh viên được dạy rằng viết mã là nền tảng cho an ninh? Việc thiếu tri thức an ninh có thể tạo ra nhiều lỗi an ninh trong mã. Chẳng hạn lỗi thông thường nhất là tràn chồng, chỗ hacker có thể tận dụng để chiếm quyền kiểm soát hệ thống. Ngày nay với nhiều người dùng máy tính trên khắp thế giới, bao nhiêu người được dạy phải tuân theo sự thận trọng cần thiết? Ngay cả khi bạn có mật khẩu mạnh, tường lửa tốt, cài đặt phần mềm an ninh nhưng hầu hết các hacker đều biết cách vượt qua chúng. Bạn có thể phòng thủ cho hệ thống của bạn tới mức độ nào đó nhưng đe doạ mới vẫn tới mọi lúc cho nên bạn phải giữ song hành với mọi phát triển hiện thời. Bạn cần dùng các phương tiện phòng ngừa đối với các rủi ro đã biết và sẵn sàng đối phó với rủi ro mới. Ngay khi đe doạ an ninh mới được phát hiện, nó cần được làn cho an ninh ngay lập tức. Đó là điều cập nhật an ninh phần mềm và miếng vá làm việc. Ngay khi tính mong manh nào đó được báo cáo hay phát hiện, lực lượng đặc nhiệm của công ti sẽ tìm cách sửa nó. Mặc dầu các miếng vá này là cần, bản thân chúng có thể là rủi ro an ninh nữa. Miếng vá có thể chỉ ra trực tiếp chỗ nào là điểm yếu và hacker sẽ khai thác chúng. Điều đó thỉnh thoảng xảy ra cho tới khi mọi người đã cập nhật phần mềm và nhiều người có thể không bao giờ làm điều đó cho tới khi quá trễ.
Khi đi tới thiết kế hệ thống CNTT an ninh, an ninh phải được tính tới với toàn thể vòng đời phát triển phần mềm. Khái niệm then chốt là ở chỗ bạn nhận diện rủi ro an ninh sớm trong hệ thống đang phát triển và sửa chúng để cho bạn có thể có an ninh chất lượng cao. Là người phát triển, bạn cần thấy rằng yêu cầu an ninh là được xác định rõ ràng cho hệ thống trong pha yêu cầu. Trong kiểm điểm yêu cầu, bạn phải kiểm để xem liệu hệ thống là được xác định thích hợp với an ninh trong đầu không. Nhiều khách hàng chỉ biết cách yêu cầu những chức năng nào đó mà không biết về an ninh cho nên điều quan trọng cho người lãnh đạo kĩ thuật là đi tới các yêu cầu an ninh mới cho hệ thống. Trong pha thiết kế bạn phải chắc rằng an ninh là một phần của thiết kế và trong pha thực hiện, bạn phải tuân theo hướng dẫn cho viết mã an ninh và thực hiện mọi kiểm thử tương ứng. Bởi vì kiểm thử an ninh thường đã được coi như kiểm thử phi chức năng, như với phần lớn các kiểm thử phi chức năng, những kiểm thử này được thực hiện ở phần cuối của phát triển sau mọi thứ khác. Hậu quả là ở chỗ nhiều lỗi an ninh đáng có thể được phát hiện và sửa sớm lại dễ dàng đi qua các giai đoạn phát triển cho tới phần cuối cùng của phát triển. Rủi ro là ở vào lúc đó, phần lớn những người phát triển và kiểm thử kiệt sức và thời gian đã hết, cho nên nhiều người bỏ qua những kiểm thử này. Nhiều người dùng không kiểm cẩn thận về vấn đề an ninh khi họ nhận sản phẩm phần mềm. Chừng nào phần mềm còn làm được điều họ cần và chạy tốt, thì họ còn hài lòng với nó. Đó là lí do tại sao ngày nay, phần lớn phần mềm đều mong manh cho hacker tấn công.
Với khoán ngoài, phát triển phần mềm được chia cho nhiều tổ, các thành viên tổ có thể chia ra ở bất kì đâu trên thế giới. Nếu dữ liệu kiểm thử chứa thông tin tư, dữ liệu sở hữu riêng thì người quản lí phải chắc rằng chúng không được gửi đi mà không được bảo vệ từ chỗ này sang chỗ khác. Tuy nhiên, nhiều người quản lí và người phát triển không được đào tạo về an ninh và không biết cách phân biệt chúng. Internet có thể dễ dàng bị hư hỏng cho nên nếu bạn dùng Internet như một phần của môi trường kiểm thử của bạn, bạn phải chắc rằng mọi đường truyền đều được an ninh; cố giữ điều đó có thể được nhiều nhất bên trong mạng công ti, dùng các móc nối an ninh VPN, SSL hay mật mã hoá theo tình huống.
Ngày nay, nhiều người dùng Laptop. Chúng được dùng trong mạng công ti an toàn, rồi được dùng bên ngoài trong một số mạng không dây tại quán cà phê internet, sân bay hay ở nhà với an ninh kém hơn nhiều. Rủi ro của việc hư hỏng là tràn ngập khắp nơi nếu máy tính của bạn không được bảo vệ đúng. Máy tính bị hỏng có thể quay lại trong mạng an ninh rồi gây hỏng cho toàn thể mạng. Một chương trình nhỏ bắt giữ và truyền thông tin mà không bị phát hiện có thể lén vào trong máy tính này, toàn thể mạng có thể bị nguy hiểm, vì thỉnh thoảng điều đó mới có thể được phát hiện. Điều này gây ra lỗ hổng an ninh trong toàn thể mạng công ti.
Điều quan trọng với mọi người phát triển là học về rủi ro an ninh và cách đấu tranh với chúng. Điều quan trọng là tuân theo thủ tục an ninh và kiểm thử nghiêm ngặt trong mọi phần mềm qua các pha phát triển. Chỉ bằng nhận biết, chúng ta có thể ngăn ngừa được hư hỏng do hacker gây ra.
—-English version—-
Computer security problems
Today, computer security is the fastest growing area in software industry. With more hackers, cyber attack, cyber crimes, computer viruses, industrial espionage, identity theft, and fraud, security is becoming more important than ever. As Information Technology (IT) systems grow larger and more complex, they require more sophisticated security systems.
Contradict to many beliefs, security is NOT a product you could buy and add to a system. It should be an integrated part of the system when it is built. Of course, you could fix security deficiencies after the system is built but it would cost you more and nobody could guarantee that all deficiencies are fixed. The security of an IT system depends on the design of the system so it is best to build security in when you design the system. The question is how many students are taught about security in the design course? How many school have security course in their curriculum? Even in programming course, how many students are taught that coding is the fundamental for security? A lack of security knowledge can create many security deficiencies in code. For example the most common mistake is stack overflow where hackers can take advantage to seize control of the system. Today with more computer users all over the world, how many are taught to follow certain necessary caution? Even when you have strong password, good firewall, install security software but most hackers know how to by-pass them. You can defense your system to some degrees but new threats come in all the time so you must keep up with all current developments. You need to use preventative means for known risks and be ready to deal with new ones. As soon as a new security threat is detected, it needs to be secured immediately. That is what software security updates and patches do. As soon as some vulnerability is reported or detected, a company task force will find a way to repair it. Although these patches are necessary, they could be a security risk themselves too. Patches could point out directly where the weaknesses are and hackers would then exploit them. It always takes a while until everyone has updated the software and many may never do it unless it is too late.
When it comes to design a secured IT system, security must be taken in consideration with the whole software development life cycle. The key concept is that you identify security risks early in the system under development and fix them so you can have high quality security. As developers, you need to see that security requirements are clearly defined for the system during the requirements phase. During requirements review, you must check to see if the system is adequately defined with security in mind. Many customers only know how to require certain functions but do not know about security so it is important for the technical leader to come up with new security requirements for the system. During design phase you must make sure that security is part of the design and during implementation phase, you must follow guidelines for secure coding and perform all the tests accordingly. Because security testing has usually been considered as non-functional tests. As with most non-functional tests, these testing are performed at the last part of development after everything else. The consequence is that many security defects which could be detected and fixed early, go easily through development stages until the last part of development. The risk is at that time, most developers and testers are exhausted and time is running out, so many skip these tests. Many users did not check carefully on security issue when they receive the software product. As long as the software do what they need and run well, then they are happy with it. That is why today, most software are vulnerable for hackers to attack.
With outsourcing, software development is divided to many teams, team members can be split anywhere in the world. If the test data contain private information, proprietary data then manager must make sure that they are not sent unprotected from one place to another. However, many managers and developers are not trained in security and do not know how to distinguish them. The Internet can be easily contaminated so if you use Internet as a part of your test environment, you must make sure that all communication lines are secured; try to keep it as much as possible inside the corporate networks, use VPN, SSL-secured links or encryption depending on the situation.
Today, many people use Laptops. They are used in the secure company network, then are used outside in some wireless network at a internet coffee shop, airport or home with much less security. The risk of contamination is overwhelming if your computer is not properly protected. A contaminated computer can comes back in the secure network then endangering the whole network. A small program that captures and transmits information without being discovered can sneaked in this computer, the whole network can be endangered, since it might take a while to be detected. This causes a security hole in the entire company network.
It is important for all developers to learn about security risks and how to fight them. It is important to follow a security procedures and rigorous testing in all software throughout the development phases. Only by awareness, we can prevent damages caused by hackers.