Share Code Web - Chia sẻ niềm đam mê bất tận > My Research > Security > [Study]Analyzing Information Flow in Java based Browser Extensions
[Study]Analyzing Information Flow in Java based Browser Extensions
Nguyễn Trung Hiếu
Share Code Web Company 2017

[Study]Analyzing Information Flow in Java based Browser Extensions

Các tiện ích mở rộng của trình duyệt hầu hết được phát triển dựa trên nền tảng Javascript nhằm giúp tăng cường các chức năng cốt lõi của trình duyệt, cải thiện khả năng sử dụng của người dùng…Để thực hiện điều đó, trình duyệt thường thực hiện các mã JSE với các đặc quyền cao. Không giống như mã Javascript trong một ứng dụng web, mã JSE không bị ràng buộc bởi các chính sách. JSE độc hại có thể lạm dụng các đặc quyền này để xâm phạm tính bảo mật và toàn vẹn thông tin như đánh cắp các thông tin nhạy cảm như cookie, mật khẩu lưu trên trình duyệt, hoặc thực hiện một đoạn mã tuỳ ý nào đó trên hệ thống máy chủ. Ngay cả khi một JSE không được công khai là độc hại thì các lỗ hổng trong JSE và trình duyệt có thể cho phép kẻ tấn công từ xa thoả hiệp bảo mật trên trình duyệt, qua đó tấn công máy tính của nạn nhân.

Trong bài báo này các tác giả giới thiệu SABRE (Security Architecture for Browser Extensions – Kiến trúc an ninh cho tiện ích mở rộng của trình duyệt) một hệ thống theo dõi luồng thông tin trong trình duyệt qua đó giúp phân tích JSE có đang chứa thông tin nhạy cảm hay không? SABRE sẽ tăng cảnh báo nếu một đối tượng chứa thông tin nhạy cảm được truy cập một cách không an toàn như gửi dữ liệu nhạy cảm qua mạng hoặc ghi dữ liệu vào một tập tin…SABRE được triển khai trên Firefox và kiểm thử bằng hai loại mã JSE độc hại và an toàn nhưng có chứa lỗ hổng bảo mật.

Tôi – Tác giả của blog – chỉ là thuật lại những nghiên cứu được của bản thân với mục đích chia sẻ để cộng đồng tra cứu, nghiên cứu và học tập. Rất mong nhận được phản hồi từ người đọc nếu như có sai sót. Tôi không chịu trách nhiệm dưới bất kỳ hình thức nào về việc độc giả vận dụng nội dung kiến thức tại đây để thực hiện những hành vi nguy hiểm, phạm pháp khác.
– Sharecodeweb.net

Giới thiệu

Các trình duyệt web hiện đại ngày nay đều hỗ trợ kiến trúc cho phép các tiện ích mở rộng của bên thứ ba can thiệp vào trình duyệt nhằm hỗ trợ cũng như tăng cường sự trải nghiệm của người dùng. Trong bài báo này, các tác giả tập trung phân tích những tiện ích mở rộng dựa trên Javascript (JSE). Các ví dụ đáng chú ý của JSE cho Firefox bao gồm Grease monkey – cho phép các kịch bản do người dùng viết để tuỳ chỉnh việc hiển thị các trang web; Firebug – môi trường phát triển Javascript; Noscript – Một JSE nhằm cải thiện bảo mật bằng cách ngăn chặn thực thi tập lệnh từ các trang web nhất định…Tuy nhiên các cuộc tấn công gần đây cho thấy JSE cần đặt ra một mối đe doạ đối với an ninh trình duyệt. Hai nhân tố góp phần vào mối đe doạ này:

  • JSE không có đầy đủ sandbox như Javascript: Không giống mã JavaScript trong một ứng dụng web được thực hiện với các đặc quyền bị giới hạn [9], mã JavaScript trong JSE thực hiện với các đặc quyền của trình duyệt. JSE không bị ràng buộc bởi chính sách nguồn gốc giống nhau [38] và có thể tự do tiếp cận các thực thể nhạy cảm, chẳng hạn như cookie hay lịch sử duyệt web. Ví dụ, JavaScript trong một JSE được phép gửi một XMLHttpRequest đến bất kỳ tên miền web nào. Mặc dù JavaScript chỉ cung cấp các cấu trúc mức ngôn ngữ hạn chế cho I/O trong khi đó các trình duyệt thường cung cấp giao diện crossdomain cho phép một JSE thực hiện I/O. Ví dụ, JavaScript không có các language-level để tương tác với hệ thống tập tin, nhưng JSEs trong Firefox có thể truy cập vào hệ thống tập tin thông qua các cấu trúc được cung cấp bởi giao diện XPCOM (mô hình đối tượng thành phần miền chéo) [7]. Điều quan trọng là các tính năng này là cần thiết để tạo ra các JSE biểu cảm hỗ trợ một tập các chức năng phong phú cho trình duyệt. Ví dụ: JSE cung cấp chức năng quản lý cookie / mật khẩu phụ thuộc rất nhiều vào khả năng truy cập vào cookie /mật khẩu. Tuy nhiên, JSE từ các bên thứ ba không tin cậy có thể chứa các chức năng độc hại nhằm khai thác các đặc quyền mà trình duyệt dành cho mã JavaScript trong phần mở rộng này. Có thể dễ dàng tạo ra một JSE độc hại mà không bị phát hiện bằng cách sử dụng các kỹ thuật được đề cập trong [11, 13, 14, 15, 18, 41].
  • Trình duyệt và lỗ hổng JSE. Ngay cả khi một JSE không độc hại, lỗ hổng trong trình duyệt và trong JSEs có thể cho phép một trang web độc hại truy cập và lạm dụng các đặc quyền của JSE [12, 35, 39, 40, 45]. Các lỗ hổng trong các phiên bản cũ của Firefox / Grease Monkey cho phép kẻ tấn công từ xa truy cập vào hệ thống tập tin trên máy chủ [35, 45]. Tương tự, các lỗ hổng trong Firebug [12, 39] cho phép kẻ tấn công từ xa thực hiện các lệnh tùy ý trên máy chủ sử dụng các khai thác giống như kịch bản cross-site. Những cuộc tấn công này khai thác những tương tác tinh tế giữa trình duyệt và JSEs. Mặc dù có rất nhiều công việc trước đây về bảo mật các phần mở rộng trình duyệt không đáng tin cậy như plug-in và BHOs ​​(được phân phối dưới dạng các tệp thực thi nhị phân) đặc biệt trong bối cảnh spyware đang bùng phát hiện nay [22, 30, 31] thì có rất ít công việc phân tích An ninh của JSEs. Các kỹ thuật hiện tại để bảo vệ chống lại một JSE không đáng tin cậy dựa vào việc xác minh thời gian tải của tính toàn vẹn của JSE.

Tóm lại, những đóng góp chính của bài viết này là:

  • Saber, một công cụ theo dõi dòng thông tin cho JSE. Saber xử lý các luồng thông tin rõ ràng, một số dạng các dòng tiềm ẩn, cũng như các dòng cross-site. Các tác giả đã triển khai một nguyên mẫu của Sabre trong Firefox.
  • Đánh giá 24 JSEs. Các tác giả đã đánh giá Saber bằng cách sử dụng các JSEs độc hại cũng như những JSE lành tính có lỗ hổng khai thác. Trong những trường hợp này, Saber đã xác định chính xác các vi phạm về luồng thông tin. Các tác giả đã chọn Firefox làm ứng dụng kiểm thử và đánh giá của các tác giả vì sự phổ biến và sẵn có rộng rãi của JSEs cho Firefox

Ví dụ về mã độc hại

Một ví dụ về mã độc hại Javascript có thể chèn vào Greasemon cho phép khai thác lỗ hổng bảo mật trên Greasemon cho phép đọc tập tin boot.ini từ ổ đĩa.

Một ví dụ khác về mã JSE độc hại là tiện ích FfsniFF. FFsniFF (Firefox Sniffer) [13] là một JSE độc hại, nếu được cài đặt, cố gắng để ăn cắp dữ liệu người dùng nhập vào các mẫu HTML. Khi người dùng “nộp” một mẫu HTML, FFsniFF lặp đi lặp lại tất cả các trường nhập không có sản phẩm nào trong biểu mẫu, bao gồm các mục nhập mật khẩu và lưu các giá trị của chúng. Sau đó nó sẽ xây dựng các lệnh SMTP và truyền các mục nhập đã lưu cho kẻ tấn công (cuộc tấn công yêu cầu máy chủ dễ bị tổn thương chạy một máy chủ SMTP). FFsniFF cũng cố ẩn mình khỏi người dùng bằng cách khai thác lỗ hổng trong trình quản lý mở rộng của Firefox (CVE-2006-6585) để xóa mục nhập khỏi danh sách trình bổ sung được Firefox trình bày. Saber phát hiện FFsniFF vì nó coi tất cả dữ liệu nhận được từ các trường biểu mẫu trên một trang web là nhạy cảm. Saber tăng một cảnh báo khi FFsniFF cố gắng gửi nội dung của biến dữ liệu nhạy cảm cùng với các lệnh SMTP trên một kênh đầu ra.

Cơ chế hoạt động của SABRE

  • Giám sát tất cả các thực thi JavaScript. Saber phải theo dõi tất cả mã JavaScript được thực hiện bởi trình duyệt. Điều này bao gồm mã trong các ứng dụng web, JSEs, cũng như mã JavaScript được thực hiện bởi lõi trình duyệt, ví dụ: mã trong trình đơn của trình duyệt và các phần tử XUL [10].
  • Dễ dàng phân bổ tác vụ. Khi Saber báo cáo một sự vi phạm luồng thông tin bởi JSE, một phân tích có thể cần phải xác định xem vi phạm này có phải là do một cuộc tấn công hay không.
  • Theo dõi lưu lượng thông tin trên các hệ thống con của trình duyệt. Trong nhiều tình huống, một trình duyệt và các JSE của nó tương tác mạnh với các hệ thống con khác, chẳng hạn như DOM và lưu trữ liên tục, bao gồm cookie, mật khẩu đã lưu và thậm chí cả hệ thống tệp cục bộ. Saber phải theo dõi chính xác các luồng thông tin qua các hệ thống con này bởi vì các cuộc tấn công do JSE kích hoạt thường liên quan đến nhiều hệ thống con của trình duyệt. Các tác giả thực hiện Sabre bằng cách sửa đổi Spider Monkey, thông dịch viên JavaScript trong Firefox, để theo dõi thông tin lưu lượng. Các tác giả đã sửa đổi các đối tượng JavaScript của Spider Monkey để bao gồm các nhãn bảo mật. Các tác giả cũng tăng cường việc giải thích hướng dẫn mã byte JavaScript để sửa đổi nhãn để truyền luồng thông tin. Các tác giả cũng đã sửa đổi các hệ thống con trình duyệt khác, bao gồm cả hệ thống con DOM (ví dụ HTML, XUL và SVG) và XPCOM để lưu trữ và truyền bá nhãn bảo mật, qua đó cho phép theo dõi lưu lượng thông tin trên các hệ thống con của trình duyệt. Cách tiếp cận này cho phép các tác giả thỏa mãn các mục tiêu thiết kế của mình. Tất cả mã JavaScript được thực hiện bởi trình thông dịch, do đó đảm bảo an toàn ngay cả khi đối mặt với các lỗ hổng trình duyệt. Hơn nữa, liên kết các nhãn bảo mật trực tiếp với các đối tượng JavaScript và theo dõi các nhãn này trong trình thông dịch và các hệ thống trình duyệt con khác. Cuối cùng, trình thông dịch có thể dễ dàng xác định mã nguồn của mã JavaScript hiện đang được thông dịch, do đó cho phép phân bổ hành động dễ dàng. Mặc dù cách tiếp cận của Saber trong việc sử dụng cách sửa đổi của trình duyệt để đảm bảo an ninh JSE là không dễ dàng và có hạn chế về ngôn ngữ [1, 2, 33]. Cách tiếp cận này cũng đảm bảo tính tương thích với các JSEs kế thừa

Saber kết hợp mỗi đối tượng trong bộ nhớ JavaScript với một cặp nhãn bảo mật. Một nhãn theo dõi lưu lượng thông tin nhạy cảm trong khi nhãn thứ hai theo dõi lưu lượng thông tin có độ toàn vẹn thấp. Mỗi nhãn bảo mật lưu trữ ba phần thông tin:

  • Mức độ nhạy cảm: xác định xem đối tượng liên quan đến nhãn có chứa thông tin nhạy cảm không.
  • Một cờ Boolean: nó sẽ xác định xem đối tượng đã được sửa đổi bằng mã JavaScript trong một JSE hay chưa;
  • Các tên của JSE và các miền web đã sửa đổi đối tượng.

Saber chỉ phát hiện và đưa ra cảnh báo nếu đối tượng bị sửa đổi bởi một JSE. Sabre theo dõi việc thực hiện tất cả mã JavaScript, bao gồm mã trong các ứng dụng web và trong lõi của trình duyệt. Việc theo dõi là cần thiết để phát hiện các cuộc tấn công thông qua các tập tin bị xâm nhập/độc hại trong lõi của trình duyệt, nó cũng có thể báo cáo vi phạm bảo mật khi dữ liệu nhạy cảm được truy cập theo cách hợp pháp, chẳng hạn như khi JavaScript trong ứng dụng web truy cập cookie.

Để tìm hiểu thêm thông tin về Saber vui lòng tham khảo bài viết gốc của tác giả.

Tác giả

Dr.T.Pandikumar

– Ph.D. Department of Computer & IT, College of Engineering, Defence University, Ethiopia

Teklish Girma

– M.Tech. Department of Computer & IT, College of Engineering, Defence University, Ethiopia

Tài liệu tham khảo

1. AdSafe: Making JavaScript safe for advertising [online] Available: http://www.adsafe.org.

2. FBJS: Facebook developers wiki [online] Available: http://wiki.developers.facebook.com/index.php/FBJS.

3. Firebug: Web development evolved [online] Available: http://getfirebug.com.

4. Firefox Add-ons [online] Available: http://addons.mozilla.org.

5. Greasespot: The weblog about Greasemonkey [online] Available: http://www.greasespot.net.

6. Internet Explorer 8 [online] Available: http://www.microsoft.com/windows/internet-explorer.

7. Mozilla.org XPCOM [online] Available: http://www.mozilla.org/projects/xpcom.

8. NoScript-JavaScript blocker for a safer Firefox experience [online] Available: http://noscript.net.

9. Signed scripts in Mozilla: JavaScript privileges [online] Available: http://www.mozilla.org/projects/security/components/signed-scripts.html.

10. XML user interface language (XUL) project [online] Available: http://www.mozilla.org/projects/xul.

11. FormSpy: McAfee avert labs July 2006 [online] Available: http://vil.nai.com/vil/content/v_14t0256.htm.

12. Mozilla Firefox Firebug extension-Cross-zone scripting vulnerability April 2007 [online] Available: http://www.xssed.org/advisory/33.

13. FFsniFF: FireFox sniFFer June 2008 [online] Available: http://azurit.elbiahosti.nu.sk/ffsniff.

14. Firefox add-ons infecting users with trojans May 2008 [online] Available: http://www.webmasterworld.com/Eirefox.browser/3644576.htm.

15. Trojan.PWS.ChromeInject.B Nov 2008 [online] Available: http://www.bitdefender.com/VIRUS-1000451-en-Trojan.PWS.ChromeInject.B.html.

16. Netscape Navigator 3.0. Using data tainting for security [online] Available: http://www.aisystech.com/resources/advtopic.htm.

17. T. Austin C. Flanagan “Efficient purely-dynamic information flow analysis” ACM PLAS June 2009.

18. P. Beaucamps D. Reynaud “Malicious Firefox extensions” Symp. Sur La Securite Des Technologies De L’Information Et Des Communications June 2008.

19. L. Cavallaro P. Saxena R. Sekar “On the limits of information flow techniques for malware analysis and containment” DIMVA July 2008.

20. R. Chugh J. Meister R. Jhala S. Lerner “Staged information flow for JavaScript” PLDI June 2009.

21. M. Dhawan V. Ganapathy “Analyzing information flow in JavaScript-based browser extensions” Technical Report DCS- TR-648 Rutgers University April 2009.

22. M. Egele C. Kruegel E. Kirda H. Yin D. Song “Dynamic spyware analysis” USENIX Annual Technical June 2007.

23. B. Eich “Better security for JavaScript” Dagstuhl Seminar 09141: Web Application Security March 2009.

24. B. Eich “JavaScript security: Let’s fix it” Web 2.0 Security and Privacy Workshop May 2009.

25. U. Erlingsson Y. Xie B. Livshits “End-to-end web application security” HotOS May 2007.

26. B. Yee et al. “Native client: A sandbox for portable untrusted x86 native code” IEEE S&P May 2009.

27. C. Grier S. Tang S. T. King “Secure web browsing with the OP web browser” IEEE S&P May 2008.

28. A. Guha S. Krishnamurthi T. Jim “Using static analysis for Ajax intrusion detection” WWW April 2009.

29. O. Hallaraker G. Vigna “Detecting malicious JavaScript code in Mozilla” 10th IEEE Conf. on Engineering Complex Computer Systems June 2005.

30. E. Kirda C. Kruegel G. Banks G. Vigna R. Kemmerer “Behavior-based spyware detection” USENIX Security August 2006.

31. Z. Li X. Wang J. Y. Choi “SpyShield: Preserving privacy from spy add-ons” RAID September 2007.

32. B. Livshits S. Guarnieri “Gatekeeper: Mostly static enforcement of security and reliability policies for J avaScript code” Technical Report MSR-TR-2009-16 Microsoft Research 2009.

33. M. S. Miller M. Samuel B. Laurie I. Awad M. Stay “Caja: Safe active content in sanitized JavaScript” June 2008.

34. P. H. Phung D. Sands A. Chudnov “Lightweight self-protecting JavaScript” ASIACCS March 2009.

35. M. Pilgrim Greasemonkey for secure data over insecure networks/sites July 2005 [online] Available: http://mozdev.org/pipermail/greasemonkey/2005-July/003994.html.

36. C. Reis J. Dunagan H. J. Wang O. Dubrovsky S. Esmeir “Browsershield: Vulnerability-driven filtering of dynamic HTML” ACMjUSENIX OSDI November 2006.

37. B. Ross C. Jackson N. Miyake D. Boneh J. C. Mitchell “Stronger password authentication using browser extensions” USENIX Security August 2005.

38. J. Ruderman “The same-origin policy” August 2001 [online] Available: http://www.mozilla.org/projects/security/components/same-origin.html.

39. “Secunia Advisory SA24743/CVE-2007-1878/CVE-2007-1947” Mozilla Firefox Firebug extension two cross-context scripting vulnerabilities.

40. “Secunia Advisory SA30284” FireFTP extension for Firefox directory traversal vulnerability.

41. M. Ter-Louw J. S. Lim V. N. Venkatakrishnan “Enhancing web browser security against malware extensions” Journal of Computer Virology vol. 4 no. 3 August 2008.

42. P. Vogt F. Nentwich N. Jovanovic E. Kirda C. Kruegel G. Vigna “Cross site scripting prevention with dynamic data tainting and static analysis” NDSS February 2007.

43. D. Wagner P. Soto “Mimicry attacks on host-based intrusion detection systems” ACM CCS November 2002.

44. H. J. Wang C. Grier A. Moshchuk S. T. King P. Choudhury H. Venter “The multi-principal OS construction of the Gazelle web browser” Technical Report MSR-TR-2009-16 Microsoft Research February 2009.

45. S. Willison “Understanding the Greasemonkey vulnerability” July 2005 [online] Available: http://simonwillison.net/2005/Jul/20/vulnerability.

46. A. Yip N. Narula M. Krohn R. Morris “Privacy-preserving browser-side scripting with bflow” EuroSys April 2009.

47. D. Yu A. Chander N. Islam I. Serikov “JavaScript instrumentation for browser security” ACM POPL January 2007.

Related Posts

Tác giả: Nguyễn Trung Hiếu

Một blogger ... cùi bắp! Đơn giản: tôi muốn ghi lại những gì xảy ra xung quanh, cả công việc lẫn cuộc sống và chia sẻ với các bạn đọc. Nếu bạn cảm thấy bài viết có nhiều điểm không chính xác, hãy comment và chia sẻ để tôi còn được học hỏi từ những góp ý của bạn. Email: hieunt.dcn@gmail.com

http://sharecodeweb.net/?s={search_term_string}