- Learn about Wiki
- Lectures
- Study
- Tips
클로저로 만들어진 웹사이트에서 일반적인 취약점의 종류와 제거할 수 있는 function이나 syntax를 설명합니다.
* Client 의 web browser 에서 의도하지 않은 스크립트 실행으로 사용자 정보 침해나 타 사이트로의 정보 전송이 가능
* CSRF(Cross Site Request Forgery)에 의해 Server 공격 또는, 관리자 권한을 이용한 데이터 침해로 이어질 수 있음.
일반 출력
(def value "<script>(alert('XSS')</script>") (str value) ;"<script>(alert('XSS')</script>"
취약한 문자열 제거
(use '[clojure.string]) (defn xssFilter [s] (replace s "<" "") ) (xssFilter value) ;"script>(alert('XSS')/script>"
xssFilter 함수의 예
(defn xssFilter [s] (replace s "script" "") ) (xssFilter value) ;"<>(alert('XSS')</>"
(defn xssFilter [s] (replace s ">" "") ) (xssFilter value) ;"<script(alert('XSS')<script/"
(defn xssFilter [s] (replace (replace (replace value "<" "") ">" "") "script" "") ) (xssFilter value) ;"(alert('XSS')/"
* DBMS 에 질의할 때, 정상적인 질의어 외의 인자나 파라미터를 삽입함으로써, 의도하지 않은 동작 및 정보를 노출시킴
(jdbc/with-query-results res ["SELECT * FROM authors WHERE id = ?" val] (doall res)))
val 이 외부 유입 변수라 할 때, 함수를 이용해 필터링을 하는 방식이 권장된다.
(defn sqlFilter [s] (replace s "union" "") )
(defn sqlFilter [s] (replace s ";" "") )
(defn sqlFilter [s] (replace s "--" "") )
(defn sqlFilter [s] (replace s "select" "") )
이 밖에도 OWASP 에서 제공하는 cheat sheet 를 활용해 함수를 작성할 수 있으며, Clojure Programing 에서 다룬 대로 Hibernate를 활용해 DB 연동이 이루어졌다면,
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
HQL 관련 예제를 사용할 수 있다.
Hibernate Query Language (HQL) Prepared Statement (Named Parameters) Examples
Query unsafeHQLQuery = session.createQuery("from Inventory where productID='"+userSuppliedParameter+"'"); Here is a safe version of the same query using named parameters Query safeHQLQuery = session.createQuery("from Inventory where productID=:productid"); safeHQLQuery.setParameter("productid", userSuppliedParameter);
* Client 나 Server 에 전달하는 초기 정보로 redirection을 결정하거나 contents type 에 따라 동작이 결정되는 페이지에 의도하지 않은 기능으로 작용할 수 있다.
* 주요 파일 노출 및 공격자의 페이지로 이동시킬 수 있다.
redirect
(defn redirect [id] (if-let [url (url-for id)] (ring.util.response/redirect url) {:status 404 :body (str “No such short URL: ” id)}))
file download
(defn serve-file [request] {:status 200 :headers {"Content-Type" "application/pdf"} :body (FileInputStream. "file.pdf")})
id와 “file.pdf” 에 유효한 파라미터와 인가되지 않은 경로 접근에 관련된 문자를 제거한다.
(defn HMFilter [s] (replace s "../" "") )
(defn HMFilter [s] (replace s "etc" "") )
(defn HMFilter [s] (replace s "$" "") )
(defn HMFilter [s] (replace s "/" "") )
* 웹 애플리케이션에서 HTML 형식이나 쿠키, URL 파라미터 형식으로 시스템 명령어를 삽입 허용함으로써 웹 상에서도 시스템 명령을 실행할 수 있는 취약점이다.
* 주요 파일을 엑세스하거나, 계정 생성 및 악의적인 침해가 가능하다.
psk 님의 정의한 유틸리티 함수를 예로 든다.
(defn mysh [& cmd] (:out (apply (partial clojure.java.shell/sh "/bin/sh" "-c") cmd)))
주요 파일을 열람할 수 있다.
(def out (mysh "cat /etc/passwd"))
아래와 같이 주요 디렉터리를 필터링하거나 |(파이프)를 이용한 명령 사용을 차단한다.
(defn CMDFilter [s] (replace s "etc" "") )
(defn CMDFilter [s] (replace s "passwd" "") )
(defn HMFilter [s] (replace s "|" "") )