Khi một ứng dụng sao chép dữ liệu mà không kiểm tra kích thƣớc có phù hợp với khả năng lƣu trữ hay không thì hacker sẽ tận dụng để cung cấp những dữ liệu có kích thƣớc lớn làm tràn heap và ghi đè lên các biến động khác dẫn đến tình trạng heap-based overflow. Còn vùng stack thì ngƣợc lại dùng để lƣu trữ các lời gọi hàm theo nguyên tắc LIFO (Last in first out, lời gọi nào nạp vào sau sẽ đƣợc sử dụng trƣớc). Những biến đƣợc lƣu trữ trong các vùng này sẽ chờ cho đến khi nhận đƣợc lời gọi hàm để thực thi, và một khi các biến này bị ghi đè bởi một chƣơng trình nguy hiểm nào đó thì chƣơng trình sẽ thực hiện chỉ thị này của hacker thông qua lời gọi hàm của mình, và tình huống bị khai thác lỗi nhƣ vậy gọi là stack-based buffer overflow.
Khi hacker khai thác lỗi tràn bộ đệm trên một hệ thống, họ có thể đoạt quyền root trên hệ thống đó. Đối với nhà quản trị, tránh việc tràn bộ đệm không mấy khó khăn, họ chỉ cần tạo các chƣơng trình an toàn ngay từ khi thiết kế.
Các bƣớc hacker tiến hành khai thác buffer overflow:
1. Tìm vị trí hay các điểm gây ra lỗi tràn bộ đệm của ứng dụng.
2. Ghi các dữ liệu có kích thƣớc lớn để vƣợt quá khả năng kiểm soát của chƣơng trình. 3. Ghi đè lên địa chỉ trả về của các hàm.
4. Thay đổi chƣơng trình thực thi bằng đoạn mã của hacker.
Để không bị tấn công BoF thì các chƣơng trình khi đƣợc viết cần tuân theo các quy tắt an toàn ngay từ lúc bắt đầu, kiểm tra lỗi cẩn thận với những chƣơng trình debug nhƣ IDA Pro, OllDbg, đặc biệt quan tâm đến các hàm hay bị BoF nhƣ gets, strcpy… Bên cạnh đó khi biên dịch nên sử dụng các chƣơng trình biên dịch an toàn nhƣ StackGuard nhằm ngăn chặn địa chỉ trả về bị ghi đè. Kiểm tra các biến đầu vào và hạn chế thực thi chƣơng trình với quyền root (trên linux) hay quyền quản trị cao nhất trên Windows. Đối với hệ điều hành và các ứng dụng hoạt động trên máy chủ cần đƣợc thƣờng xuyên kiểm tra bằng những chƣơng trình nhƣ NESSUS, Retina, GFI nhằm phát hiện kịp thời các ứng dụng hay tiến trình gây lỗi. Trong vai trò quản trị chúng ta nên định kì cập nhật các bản vá, hotfix, theo dõi những thông tin mới nhất về lỗi bảo mật liên quan đến các ứng dụng hay hệ thống mà cơ quan, tổ chức đang dùng.
1.4.6 Nghe trộm (Sniffer)
Các hệ thống truyền đạt thông tin qua mạng đôi khi không chắc chắn lắm và lợi dụng điều này, hacker có thể truy cập vào data paths để nghe trộm hoặc đọc trộm luồng dữ liệu truyền qua. Hacker nghe trộm sẽ thu thập những thông tin quý giá về hệ thống nhƣ một packet chứa password và username của một ai đó. Các chƣơng trình nghe trộm còn đƣợc gọi là các sniffing. Các sniffing này có nhiệm vụ lắng nghe các cổng của một hệ thống mà hacker muốn nghe trộm, thu thập dữ liệu trên các cổng này và chuyển về cho hacker. Trong môi trƣờng bảo mật thông tin thì sniffer là những công cụ có khả năng chặn bắt các gói tin trong quá trình truyền và hiển thị dƣới dạng giao diện đồ họa hay dòng lệnh để có thể theo dõi dễ dàng. Một số ứng dụng sniffer cao cấp không những có thể đánh cắp các gói tin mà còn ráp chúng lại thành dữ liệu ban đầu nhƣ là các thƣ điện tử hay tài liệu gốc. Sniffer đƣợc dùng để đánh chặn dữ liệu giữa hai hệ thống và tùy thuộc vào công cụ cũng nhƣ cơ chế bảo mật đƣợc thiết lập mà các hacker có thể đánh cắp các thông bí mật nhƣ tài khoản ngƣời dùng và mật khẩu đăng nhập vào Web, FTP, Email, POP3/SMTP hay các tin nhắn nhanh bằng chƣơng trình Yahoo! Messenger, Skype, ICQ. Trong chƣơng này chúng ta sẽ thảo luận về cách làm việc của sniffer và những công cụ nghe lén hàng đầu. Bất kì giao thức nào không thực hiện mã hóa dữ liệu thì về nguyên tắc đều có thể bị hacker tấn công qua hình thức sniffer. Những giao thức thông dụng nhƣ HTTP, POP3, Simple Network Mnagement Protocol (SNMP), và giao thức truyền tập tin FTP đều bị sniffer đánh cắp dữ liệu dễ dàng vì thông tin đăng nhập đƣợc gửi đi dƣới dạng cleartext (không mã hóa).