CRLF Injection Attack là gì? 4 Hình thức tấn công phổ biến

CRLF Injection Attack là gì? Tìm hiểu hậu quả, các hình thức tấn công và những biện pháp ngăn chặn CRLF Injection Attack

CRLF Injection Attack là gì? 4 Hình thức tấn công phổ biến

CRLF Injection Attack là gì? 4 Hình thức tấn công phổ biếnLink to heading

Nếu bạn tìm hiểu về các lỗ hổng bảo mật như SQL Injection hay XSS, thì chắc chắn cũng nên biết đến một hình thức tấn công khác không kém phần nguy hiểm là CRLF Injection Attack. Trên thực tế, dạng tấn công này nguy hiểm vì nó có thể mở đường cho hacker thay đổi phản hồi HTTP, đánh cắp thông tin người dùng hoặc thực hiện các cuộc tấn công phức tạp hơn. 

Trong bài viết này, System443 sẽ giúp bạn hiểu rõ hơn về CRLF Injection Attack cũng như các biện pháp ngăn chặn cuộc tấn công nguy hiểm này.

CRLF Injection Attack là gì?Link to heading

CRLF Injection Attack hay Carriage Return Line Feed (CRLF) Injection Attack, còn được gọi là tấn công chia tách phản hồi HTTP (HTTP Response Splitting), là một mối đe dọa an ninh mạng lợi dụng các ký tự đặc biệt Carriage Return (CR) và Line Feed (LF) trong phần HTTP header của ứng dụng web. Loại tấn công này có thể dẫn đến nhiều hậu quả nghiêm trọng, từ cross-site scripting, chèn cookie, tấn công phishing cho đến đầu độc bộ nhớ đệm web.

Bằng cách chèn các ký tự CRLF không mong muốn vào trong HTTP header, kẻ tấn công có thể thay đổi header hoặc tiêm nội dung độc hại vào một trang web. Chúng khai thác cách thức mặc định mà phản hồi HTTP được tạo ra và diễn giải. Khi tiêm thêm các chuỗi CRLF vào dữ liệu đầu vào, kẻ tấn công có thể chia tách header phản hồi HTTP và kiểm soát dữ liệu phía sau nó.

Một biến thể khác của CRLF Injection Attack là chèn các ký tự CRLF vào log, giúp kẻ tấn công che giấu dấu vết bằng cách làm sai lệch hoặc che khuất các bản ghi hành vi trái phép.

Cơ chế InjectionLink to heading

Cơ chế tấn công của CRLF Injection khá đơn giản. Kẻ tấn công sẽ chèn một chuỗi CRLF (%0D%0A hoặc \r\n trong ASCII) vào dữ liệu đầu vào của người dùng, từ đó tiêm các HTTP header tùy ý hoặc chia tách phản hồi HTTP thành hai phần. Chuỗi CRLF có chức năng kết thúc một dòng và bắt đầu một dòng mới trong nhiều giao thức xử lý văn bản, bao gồm cả HTTP.

HTTP Response SplittingLink to heading

HTTP Response Splitting liên quan đến việc thao túng cả HTTP response header và body bằng cách chèn các ký tự CRLF. Điều này cho phép kẻ tấn công tạo ra nhiều phản hồi HTTP từ một phản hồi duy nhất. Kiểu tấn công này có thể bị lợi dụng theo nhiều cách, chẳng hạn như thiết lập các HTTP header tùy ý hoặc chia tách nội dung phản hồi.

Log File TamperingLink to heading

Log File Tampering thông qua CRLF Injection cho phép kẻ tấn công chèn các mục ghi log tùy ý vào nhật ký của ứng dụng bằng cách đưa chuỗi CRLF vào dữ liệu đầu vào của người dùng. Điều này có thể khiến log trở nên không đáng tin cậy, làm phức tạp nỗ lực của quản trị viên hệ thống trong việc theo dõi và phân tích hoạt động trong hệ thống. Bằng cách tạo ra dữ liệu đầu vào được ngụy trang như nhiều bản ghi log khác nhau, kẻ tấn công có thể tạo ra dấu vết giả, che giấu hoạt động của mình hoặc đổ lỗi cho những người vô tội.

Hậu quả của CRLF Injection AttackLink to heading

Cross-Site Scripting (XSS)Link to heading

Các cuộc tấn công CRLF Injection có thể dẫn đến nhiều hậu quả khác nhau, trong đó có Cross-Site Scripting (XSS). XSS là một lỗ hổng bảo mật cho phép kẻ tấn công chèn các đoạn mã độc vào trang web mà người dùng khác truy cập. Trong các cuộc tấn công CRLF Injection, kẻ tấn công có thể thao túng HTTP header để tiêm script vào trình duyệt của nạn nhân, từ đó gây ra một cuộc tấn công XSS.

Mức độ thiệt hại do XSS gây ra có thể khác nhau. Ở mức nhẹ, nó có thể dẫn đến rò rỉ dữ liệu không quan trọng hoặc làm thay đổi giao diện website. Tuy nhiên, trong các trường hợp nghiêm trọng hơn, kẻ tấn công có thể truy cập trái phép vào dữ liệu nhạy cảm hoặc thậm chí chiếm quyền kiểm soát các tương tác của nạn nhân với website.

Một hậu quả nghiêm trọng khác của CRLF Injection Attack là Cookie Injection. Trong trường hợp này, kẻ tấn công có thể thao túng HTTP header để chèn thêm các trường Set-Cookie vào phản hồi. Điều này cho phép chúng thay đổi cookie của nạn nhân, có thể dẫn đến những hành vi không mong muốn.

Ví dụ, kẻ tấn công có thể thiết lập cookie cho một domain khác hoặc sửa đổi cookie hiện có để thay đổi thiết lập người dùng. Hậu quả có thể là truy cập trái phép vào tài khoản người dùng, thậm chí dẫn đến đánh cắp danh tính.

Phishing AttackLink to heading

Các cuộc tấn công CRLF Injection cũng có thể dẫn đến Phishing Attack. Bằng cách thao túng HTTP header, kẻ tấn công có thể chuyển hướng nạn nhân đến một trang web độc hại hoặc thay thế nội dung của trang web hiện tại bằng nội dung do chúng kiểm soát. Trang web giả mạo này có thể lừa nạn nhân cung cấp thông tin nhạy cảm, chẳng hạn như mật khẩu hoặc số thẻ tín dụng.

Phishing là một mối đe dọa nghiêm trọng vì nó có thể dẫn đến truy cập trái phép và trong những trường hợp nặng hơn là mất mát về mặt tài chính hoặc bị đánh cắp danh tính.

Web Cache PoisoningLink to heading

Kẻ tấn công cũng có thể lợi dụng CRLF Injection Attack để thao túng HTTP header và thay đổi các cache control header, khiến nội dung độc hại được lưu trong bộ nhớ đệm. Điều này có thể ảnh hưởng đến tất cả người dùng truy cập vào nội dung đã bị đầu độc, gây ra hậu quả trên diện rộng. Web cache poisoning thường rất khó phát hiện và ngăn chặn vì nó liên quan đến cả ứng dụng web lẫn proxy bộ nhớ đệm.

Các loại CRLF Injection AttackLink to heading

CRLF Injection trong Log FileLink to heading

CRLF Injection trong log file có thể làm suy yếu nghiêm trọng tính toàn vẹn của dữ liệu log, khiến việc theo dõi hoạt động của người dùng hoặc phát hiện hành vi độc hại trở nên khó chính xác hơn. Trong trường hợp này, kẻ tấn công khai thác cấu trúc của log file để chèn vào các thông tin sai lệch hoặc giả mạo.

Ví dụ, một bản ghi log thông thường có thể trông như sau:

123.123.123.123 - 22:34 - /index.php?page=home

Kẻ tấn công, bằng cách chèn các ký tự CRLF (%0D%0A, hoặc mã hóa URL thành %0d%0a) vào một HTTP request, có thể thao túng nội dung của log file. Thủ thuật này được thực hiện bằng cách nối thêm các ký tự CRLF đã mã hóa, theo sau đó là một mục log giả mạo, vào chuỗi query string của request.

Khi máy chủ ghi lại request này, nó sẽ hiểu các ký tự CRLF là ký tự kết thúc dòng và bắt đầu một dòng mới, dẫn đến log file có dạng:

123.123.123.123 - 08:15 - /index.php?page=home&

127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

Trong bản ghi log đã bị thao túng này, các hành động của kẻ tấn công xuất hiện như thể chúng bắt nguồn từ một nguồn đáng tin cậy (localhost, 127.0.0.1), che giấu nguồn gốc thực sự của hoạt động độc hại.

HTTP Response SplittingLink to heading

HTTP Response Splitting xảy ra khi kẻ tấn công có thể chèn một chuỗi CRLF vào trong HTTP response header. Điều này có thể được sử dụng để thêm các header tùy ý, kiểm soát phần thân của phản hồi hoặc thậm chí chia phản hồi thành hai phản hồi riêng biệt.

Ví dụ, hãy xem xét tình huống khi dữ liệu đầu vào của người dùng được chèn trực tiếp vào HTTP header mà không qua xử lý đúng cách. Kẻ tấn công có thể đưa vào chuỗi như sau:

EvilInput%0D%0AContent-Length:%200%0D%0A%0A%20New%20HTTP%20Response%20Header:

Điều này sẽ khiến máy chủ hiểu phần dữ liệu tiếp theo như một HTTP response mới, từ đó có thể dẫn đến các kiểu tấn công như cache poisoning, XSS hoặc các tấn công khác.

HTTP Header InjectionLink to heading

HTTP Header Injection tương tự như HTTP Response Splitting, nhưng tập trung cụ thể vào việc chèn các header độc hại. Ví dụ, kẻ tấn công có thể chèn một header Set-Cookie, buộc trình duyệt của người dùng lưu trữ cookie do kẻ tấn công kiểm soát.

Hãy xem xét tình huống khi dữ liệu đầu vào của người dùng được thêm vào header mà không được kiểm tra và lọc đúng cách. Kẻ tấn công có thể đưa vào một đoạn mã độc và từ đó có khả năng chiếm quyền điều khiển phiên làm việc của người dùng.

Ví dụ: maliciousInput%0D%0ASet-Cookie:%20sessionId=123456

Memcached InjectionLink to heading

Memcached Injection liên quan đến việc chèn các ký tự CRLF vào những giá trị được lưu trữ trong Memcached hoặc các hệ thống cache tương tự. Điều này có thể làm hỏng hoặc thao túng dữ liệu trong bộ nhớ đệm, từ đó ảnh hưởng đến hành vi của ứng dụng hoặc đầu độc cache bằng dữ liệu độc hại.

Ví dụ, kẻ tấn công có thể cố gắng lưu trữ một giá trị với mục đích thao túng hoặc phá hỏng các mục cache trong Memcached:

ValueData%0D%0ASet-AnotherValue:maliciousContent

Cách ngăn chặn CRLF Injection AttackLink to heading

Không bao giờ sử dụng trực tiếp dữ liệu đầu vào của người dùng trong HTTP Stream

Dữ liệu đầu vào không được kiểm tra là một trong những nguồn gây ra lỗ hổng trong ứng dụng web phổ biến nhất. Việc sử dụng trực tiếp dữ liệu người dùng trong HTTP stream có thể tiện lợi, nhưng nếu không được xử lý đúng cách, nó có thể dẫn đến CRLF Injection và nhiều vấn đề bảo mật nghiêm trọng khác.

Kẻ tấn công có thể chèn dữ liệu làm thay đổi cấu trúc hoặc hành vi của HTTP stream, dẫn đến truy cập trái phép, đánh cắp dữ liệu hoặc các hậu quả nguy hại khác. Để ngăn chặn điều này, không bao giờ tin tưởng tuyệt đối vào dữ liệu đầu vào của người dùng. Hãy luôn coi nó là một nguồn tiềm ẩn rủi ro bảo mật. Đảm bảo rằng dữ liệu đầu vào được kiểm tra và lọc đúng cách trước khi sử dụng trong HTTP stream.

Xóa hoặc mã hóa ký tự CRLF và ký tự xuống dòngLink to heading

Một cách khác để ngăn chặn CRLF Injection Attack là mã hóa các ký tự CRLF trong dữ liệu đầu vào. Việc mã hóa sẽ biến các ký tự này thành định dạng mà máy chủ không nhận diện được như một ký tự xuống dòng. Điều này đảm bảo rằng, ngay cả khi kẻ tấn công chèn được các ký tự CRLF vào đầu vào, chúng cũng không thể thay đổi HTTP header.

Ngoài ra, ký tự xuống dòng cũng là một phương thức mà kẻ tấn công có thể dùng để tiêm chuỗi CRLF vào HTTP header. Các ký tự này đánh dấu kết thúc dòng và có thể bị lợi dụng để thay đổi cấu trúc của HTTP stream. Để ngăn chặn, hãy loại bỏ toàn bộ ký tự xuống dòng khỏi dữ liệu người dùng trước khi đưa chúng vào HTTP header.

Vô hiệu hóa các HTTP Header không cần thiết trên Web ServerLink to heading

Mỗi phản hồi HTTP đều bao gồm một loạt header cung cấp thông tin về phản hồi. Một số header có thể không cần thiết cho ứng dụng của bạn và có thể được vô hiệu hóa một cách an toàn. Việc vô hiệu hóa các header dư thừa sẽ giúp giảm thiểu điểm yếu tiềm ẩn trong ứng dụng, đồng thời hạn chế khả năng kẻ tấn công lợi dụng chúng để tiến hành CRLF Injection Attack.

Loại bỏ ký tự CRLF khỏi dữ liệu trước khi ghi logLink to heading

Ghi log dữ liệu người dùng là một thực hành hữu ích để theo dõi và gỡ lỗi. Tuy nhiên, đây cũng có thể trở thành một điểm yếu cho các cuộc tấn công CRLF Injection và các kiểu tấn công khác.

Trước khi ghi dữ liệu người dùng vào log, hãy đảm bảo rằng mọi chuỗi CRLF đã bị loại bỏ. Điều này ngăn chặn khả năng những chuỗi này được ghi vào log và sau đó bị lợi dụng để thao túng HTTP header.

Lời kếtLink to heading

CRLF Injection Attack là một trong những mối đe dọa bảo mật nguy hiểm mà bất kỳ ứng dụng web nào cũng có thể gặp phải nếu không được kiểm soát chặt chẽ. Việc hiểu rõ cơ chế tấn công, cùng với áp dụng các biện pháp phòng chống như lọc và mã hóa dữ liệu đầu vào, vô hiệu hóa header không cần thiết và quản lý log an toàn sẽ giúp doanh nghiệp giảm thiểu tối đa rủi ro.

Hãy xem thêm những bài viết khác của System443 để hiểu rõ hơn về các loại tấn công mạng, đồng thời kiểm tra website của bạn với công cụ quét mã độc để phát hiện sớm các rủi ro bảo mật. 

Contact background

Bạn muốn nhận tư vấn về các dịch vụ của System443

Đội ngũ chuyên gia giàu kinh nghiệm của chúng tôi luôn sẵn sàng hỗ trợ bạn!

Mascot contact
Contact now