Analysis of Sources and Sinks

Cách phổ biến nhất để audit source code là tìm các sources và sinks rồi tìm data flows giữa chúng.

Analysis Using Sources

Sources ở đây có thể là user input (trực tiếp) hoặc từ database, response của server khác, etc (gián tiếp).

Sau khi có các sources thì kiểm tra xem chúng được sử dụng ở đâu và tiến hành phân tích nhằm đưa ra các data flows khả dĩ. Cách làm này cho coverage tốt hơn nhưng để tiết kiệm thời gian thì ta chỉ nên tập trung vào các data flows mà có thể khai thác được và có rủi ro cao.

Important

Chú ý đến cách chúng được biến đổi hoặc các điều kiện sử dụng trong các ngữ cảnh nhất định. Việc tương tác của các sources khác nhau cũng cần chú trọng vì một source có thể ảnh hưởng đến việc biến đổi của một source khác.

Analysis Using Sinks

Để tìm các sinks, ta có thể tìm kiếm các patterns nguy hiểm chẳng hạn như unprepared SQL statements hoặc các hàm mà thực thi lệnh hệ thống.

Có thể sử dụng SemGrep để tự động hóa việc này.

Reviewing Security Implementations in the Source Code

Chúng ta có thể review qua các biện pháp bảo mật (filter và sanitizer) được triển khai trong ứng dụng:

  • Deny list
  • Allow list
  • Sanitization: nên được đặt càng gần sink càng tốt vì nếu không thì attacker có thể tìm ra một path khác để bypass.

Dependency Analysis

Có thể kiểm tra luôn cả các dependencies được sử dụng bởi source code bởi vì chúng cũng có thể chứa các sources và sinks mà có thể bị khai thác.

Resources