본문 바로가기

[시큐어코딩-12] 입력데이터 검증및 표현(12) HTTP응답 분할 발생원인HTTP요청에 대한 검증을 하지 않은 경우 발생 영향 XSS 발생, 캐시 훼손 캐리지리턴(%0D)와 라인추가문자(%0A)를 이용해서 HTTP응답을 분할하여 CRLF공격을 할 수 있다.Carrage Return은 커서의 위치를 줄의 맨 첫번째 자리로 옮기는 것이고, Line Feed는 새로운 줄을 생성하는 문자이다.현재 윈도우에서만 Carrage Return과 Line Feed 문자 둘다 사용하고 있으며, UNIX, LINUX에서는 Line Feed만 사용하고 있다. 그리고 자바에서는 carrage Return 문은 %0D가 아닌 \r 로 사용되고 있으며, Line Feed 또한 %OA가 아닌 \n으로 사용한다. 이러한 Carrage Return, Line Feed문들을 이용하여 임의의 제약들을 깨.. 더보기
[시큐어코딩-11] 입력데이터 검증및 표현(11) 디렉토리 경로조작 발생원인외부의 입력이 시스템에서 경로 등으로 활용되는 환경에서 입력값 검증이 없는 경우 발생 영향임의의 파일 생성, 주요 파일 노출, 파일 삭제 코드예 안전하기 않은 코드의 예 - JAVA……public void f(Properties request) {……String name = request.getProperty("filename");if( name != null ) { File file = new File("/usr/local/tmp/" + name); file.delete();} ……} name에 대한 검증없이 사용 안전한 코드의 예 - JAVA…… public void f(Properties request) { …… String name = request.getProperty("user"); i.. 더보기
[시큐어코딩-10] 입력데이터 검증및 표현(10) 크로스사이트 요청위조 발생원인서버에 검증없이 외부의 입력값을 저장하여 해당 내용을 열람할 경우 발생 CSRF(Cross Site Response Forgery)의 약어로 XSS를 이용한 요청위조를 의미한다.XSS와의 가장 큰 차이점은 공격대상이 클라이언트냐 서버냐에 따라 구분할 수있다. 특정 페이지에서 공격자는 자신이 원하는 스크립트를 게시판에 삽입하고 누군가가 게시판을 읽기를 기다리면 된다. CSRF는 세션쿠키, SSL인증서, 윈도 도메인 인증과 같이 자동으로 입력된 신뢰 정보를 기반으로 한 웹어플리케이션에서 사용자의 신뢰 정보내에서 사용자의 요청을 변조함으로 써 해당 사용자의 권한으로 악의적인 공격을 수행할 수 있는 취약점이다. 원클릭 공격, 사이드 재킹, 세션 라이딩 등으로 알려져 있고, XSS와 유사하지만 XSS의 경.. 더보기
[시큐어코딩-9] 입력데이터 검증및 표현(9) LDAP삽입 발생원인 LDAP 명령어에 대한 검증 처리가 없는 경우 발생 영향 정보 유출/ 조작 LDAP(Lightweight Directiry Access Protocol)은 조직이나 개체, 그리고 인터넷 이나 기업내의 인프라넷등 네트워크 상에 있는 파일이나 장치들과 같은 자원등의 위치를 찾을 수 있게 해주는 소프트웨어 프로토콜이다. LDAP은 네트웍 내의 디렉토리 서비스 표준인 X.500의 일부이다. Netscape는 자신들의 커뮤니케이터 최신판에 LDAP을 표함하고 있다. 마이크로소프트는 액티브 디렉토리라고 부르는 제품의 일부로서 LDAP을 포함하였다. 노벨 네트워크 디렉토리 서비스는 LDAP와 상호운영된다. LDAP은 어떻게 작동하는가? LDAP디렉토리 서비스는 클라이언트-서버 모델에서 기초하는데 하나 또는 .. 더보기
[시큐어코딩-8] 입력데이터 검증및 표현(8) XPath삽입 발생원인 외부 입력값을 적절한 검사과정 없이 XPath 쿼리문 생성에 이용할 경우 발생 영향 데이터 변조, 조회, 인증 우회 코드예 안전하기 않은 코드의 예 - JAVA …… // 외부로 부터 입력을 받음 String name = props.getProperty("name"); String passwd = props.getProperty("password"); …… XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); …… // 외부 입력이 xpath의 인자로 사용 XPathExpression expr = xpath.compile("//users/user[login/text()='" +name + "' an.. 더보기
[시큐어코딩-7] 입력데이터 검증및 표현(7) XQuery삽입 발생원인 XQuery를 사용하는 페이지에서 입력값 검증을 하지 않은 경우 발생 영향 데이터 무단 조회, 인증절차 우회 코드예 안전하기 않은 코드의 예 - JAVA … // 외부로 부터 입력을 받음 String name = props.getProperty("name"); Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=rootDir"); javax.naming.directory.DirContext ctx = new InitialDirContext(env); jav.. 더보기
[시큐어코딩-6] 입력데이터 검증및 표현(6) 신뢰되지않은 URL주소로 자동접속연결 발생원인 입력값을 자동으로 redirection 하는 사이트에서 입력값 검증이 없는 경우 발생한다. 영향 피싱이나 XSS 코드예 안전하기 않은 코드의 예 - JAVA …… protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String query = request.getQueryString(); if (query.contains("url")) { String url = request.getParameter("url"); response.sendRedirect(url); } …… url 파라미터에 대한 검증을 수행하지 않음 안전한 코드의 예 - JA.. 더보기
[시큐어코딩-5] 입력데이터 검증및 표현(5) 위험한 형식 파일 업로드 발생원인 파일 업로드가 가능한 페이지에서 업로드 파일에 대한 검증을 수행하지 않을 경우 발생한다. 영향 시스템 내부 명령어 실행 및 제어가능 코드예 안전하기 않은 코드의 예 - JAVA …… public void upload(HttpServletRequest request) throws ServletException { MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; String next = (String) mRequest.getFileNames().next(); MultipartFile file = mRequest.getFile(next); // MultipartFile로부터 file을 얻음 String file.. 더보기