본문 바로가기

Web Security/Secure Coding

(8)
시큐어 코딩 (XPath Injection) XPath Injection 이란? 외부 입력 값을 적절한 검사과정 없이 XPath 쿼리문 생성을 위한 문자열로 사용하면, 공격자는 프로그래머가 의도하지 않았던 문자열을 전달하여 쿼리문의 의미를 왜곡시키거나 그 구조를 변경하고 임의의 쿼리를 실행하여 인가되지 않은 데이터를 열람할 수 있게 만드는 공격 XPath 란? XPath는 XML 문서의 일부에 주소를 지정하기 위한 언어로, XSLT와 XPointer에서 모두 사용된다. XPath 역할 XPath는 XML 문서를 노드 트리로 모델링하여 경로 표현식(Path Expression)을 통해 XML 문서의 노드 또는 노드 집합을 선택한다. 이 때, 경로 표현식은 기존 컴퓨터 파일 시스템으로 작업할 때 볼 수 있는 표현식과 매우 유사하다. 이러한 XPath ..
시큐어 코딩 (XQuery Injection) XQuery Injection 공격이란? XQuery를 사용하여 XML 데이터에 대한 동적 쿼리문을 생성할 때 사용하는 외부 입력 값에 대해 적절한 검증 절차가 존재하지 않을 경우, 공격자가 쿼리문의 구조를 임의로 변경하여 허가되지 않은 데이터를 조회하거나 인증 절차를 우회할 수 있게 되는 공격. XQuery Injection 공격 원리 1. 공격자가 XQuery Injection을 시도 2. XML 데이터에 대한 조작된 동적 쿼리문 생성 3. 조작된 XQuery 문 실행 4. 서버는 실행된 결과(공격 결과)를 공격자에게 전달 예제 코드를 보며 XQuery Injection 이 일어나는 이유를 살펴보자. [안전하지 않은 코드] ``` String name = props.getProperty("name")..
시큐어 코딩 (Open Redirect) Open Redirect 공격이란? 사용자로부터 입력되는 값을 외부사이트의 주소로 사용하여 자동으로 연결하는 서버 프로그램은 피싱 공격에 노출되는 취약점으로 이어질 수 있다. 일반적으로 클라이언트에서 전송된 URL 주소로 연결하기 때문에 안전하다고 생각할 수 있지만, 해당 폼의 요청을 변조함으로써 공격자는 사용자가 위험한 URL로 접속할 수 있도록 공격할 수 있다. Open Redirect 공격 원리 1. 공격자가 URL 주소를 변조하여 배포 2. 다른 사용자가 사이트를 접속 3. 피싱 사이트 혹은 악성 다운로드 페이지로 자동 연결 예를 들어, www.테스트.com 사이트에서 특정 URL로 이동시키는 작업이 파라미터에 존재할 경우, 공격자는 www.테스트.com/?url=악성주소 를 만들어 악성 주소가 ..
시큐어 코딩 (File upload vulnerability) File Upload Vulnerability 란? 서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)이 업로드 가능하고, 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우 File upload 취약점이 발생할 수 있다. 공격자는 스크립트 파일을 업로드하고 이 파일을 통해 시스템 내부 명령어를 실행하거나 외부와 연결할 경우 시스템을 제어할 수 있게 된다. File Upload Vulnerability 공격 원리 1. 공격자가 스크립트 파일을 웹 사이트에 업로드 2. 공격자가 해당 스크립트 파일 (php, jsp, asp, cgi, inc, pl, php3 등) 이 저장된 경로에 접근이 가능할 경우, 업로드 된 경로로 이동 3. 해당 파일에 접근하여 파일을 실행 4. 웹..
시큐어 코딩 (Command Injection) Command Injection 이란? 적절한 검증 절차를 수행하지 않은 사용자 입력 값이 운영체제 명령어의 일부 또는 전부로 구성되어 실행되는 경우, 의도하지 않은 시스템 명령어가 실행되어 부적절하게 권한이 변경되거나 시스템 동작 및 운영에 악영향을 미치는 공격. 일반적으로 명령어 라인의 인수나 스트림 입력 등 외부 입력을 사용하여 시스템 명령어를 생성하는 프로그램에서 적절한 처리를 해주지 않으면, 공격자가 원하는 명령어 실행이 가능하게 된다. Command Injection 공격 원리 1. 공격자가 입력 값에 ';', "||", "&&" 등을 포함시켜 공격자가 원하는 명령어를 삽입 2. 웹 서버에서 공격자가 요청한 명령이 실행 Command Injection 공격을 당했을 경우, 공격자가 웹 서버에 ..
시큐어 코딩 (Cross-Site Scripting) XSS (Cross-Site Scripting) 이란? 웹 페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 악의적인 실행되게 유도하는 것. 흔히 XSS 공격은 외부 입력에 대해 검증을 하지 않는 웹 사이트에서 게시판에 스크립트 삽입이 가능한 경우 주로 발생한다. 즉, 공격자가 악성 스크립트 구문을 포함하여 게시물을 업로드 한 후, 다른 사용자가 해당 게시물을 열람하는 경우 접속자의 권한으로 부적절한 스크립트가 수행되어 정보 유출 등의 공격이 발생할 수 있다. (XSS 공격은 흔히 다른 사용자의 쿠키를 탈취하는데 주로 사용된다.) (Stored) XSS 공격 원리 1. 공격자가 악성 스크립트를 포함한 게시물을 업로드 (Posting, 악성 스크립트가 서버에 저장됨) 2. 다른 유저가 해당 게시물을 열람..
시큐어 코딩 (Resource Injection) Resource Injection 공격이란? 외부 입력 값을 검증하지 않고 시스템 자원에 대한 식별자로 사용하는 경우, 공격자는 입력 값을 조작하여 시스템이 보호하는 자원에 임의로 접근하거나 수정할 수 있고 잘못된 입력값으로 인해 시스템 자원 사이에 충돌을 불러 일으킬 수 있다. 포트 번호를 사용자로부터 입력받는 경우를 예로 들어보자. [안전하지 않은 코드] public void service() throws IOException { int def = 1000; ServerSocket = serverSocket ; Properties props = new Properties(); String fildName = "file_list"; FileInputStream in = new FileInputStrea..
시큐어 코딩 (SQL Injection) SQL Injection 공격이란? 데이터베이스(DB)와 연동된 웹 어플리케이션에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우, 공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB 정보를 조회하거나 조작할 수 있는 공격이다. SQL Injection 공격 원리 1. 공격자가 SQL Injection을 통해 조작된 Request를 보냄 2. 웹 서버는 데이터베이스에 Query 문을 전달 3. 데이터베이스는 조작된 SQL Query 실행 4. 데이터베이스에서 실행된 결과를 웹서버에게 전달 5. 웹 서버는 실행된 결과(공격 결과)를 공격자에게 전달 SQL Injection 예시 예를 들어, admin 계정 (id: admin, pw: admin)이 존재한다고 가정해보자. 만약 사용자가 아..