가. 원인 - 외부입력값의 신뢰를 전제하여 보호 메커니즘을 구현 나. 영향 - 보호 메커니즘을 우회하여 권한상승 - 허가되지 않은 기능 사용 다. 보안대책 - 상태정보, 민감데이터, 세션정보와 같은 중요정보는 서버에 저장 - 보안절차도 서버에서 수행 - 보안결정에 외부입력값 대신 내부 새션값을 사용 - 외부입력값을 사용해야 할 경우, 안전한 암호화 처리 및 무결성 체크 라. 안전한 코드 1. 외부입력값 미사용 int price = 1000; int quantity = Integer.parseInt( request.getParameter( "quantity" ) ); int total_price = price * quantity; ... 마. 진단방법 1. 인증여부를 확인하기 위한 변수를 확인 2. 변수가..
가. 원인 - 정수형 입력값의 크기를 검증하지 않고 사용하는 경우 - 정수표현 범위보다 큰 값을 사용하여 음수로 사용될 경우 나. 영향 - 시스템 오류 발생 - 임의명령 실행 - 시스템 점령 등 다. 보안대책 - 언어 및 플랫폼에 따른 정수 타입의 범위를 확인 - 정수형 입력값을 연산에 사용할 경우, 연산결과의 범위를 체크 라. 안전한 코드 1. 정수범위 확인 int count = Integer.parseInt( request.getParameter("count") ); if (count < 0 ) return -1; String[] arrString = new String[ count ]; 마. 진단방법 1. 배열크기에 변수를 사용하여 동적생성하는지 확인 2. 변수가 외부입력값인지 확인 3. 해당 변수..
가. 원인 - 개행문자(CR/LF)가 포함된 외부입력값을 응답헤더에 사용할 경우 나. 영향 - 두 번째 응답에 악성코드를 주입하여, XSS 공격 및 캐시훼손 공격 다. 보안대책 - HTTP 응답헤더에 사용하는 외부입력값에 개행문자를 제거 후 사용 라. 안전한 코드 1. 개행문자 삭제 // Set-Cookie에 입력값 저장 String lastLogin = request.getParaeter("last_login"); lastLogin = lastLogin.replaceAll("[\\r\\n]", ""); Cookie c = new Cookie("LASTLOGIN", lastLogin); response.addCookie( c ); // Location에 입력값 저장 String nextURL = requ..
가. 원인 - 자동화된 코드를 통한 요청인지 실제 사용자의 정상적인 요청인지 확인하지 않고 요청을 처리 나. 영향 - 희생자의 권한으로 요청이 처리 - 관리자 또는 다른 사용자의 권한을 도용하여 중요기능을 실행 다. 보안대책 - 입력화면 폼 작성 시 POST방식을 사용 - CSRF토큰을 이용하여 URL 직접호출을 통한 시스템 사용을 방지 - 중요기능에 대해서 사용자 세션검증 및 재인증 라. 안전한 코드 1. CSRF토큰 이용 // 1. 입력화면을 요청받은 경우 String token = UUID.randomUUID().toString(); session.setAttribute("CSRF_TOKEN", token); // 2. 입력화면에서 Hidden 필드를 통해 전달받은 토큰을 전달 // 3. 요청 처리..
가. 원인 - 검증없이 외부입력값을 LDAP 필터문에 사용하여 LDAP 명령구문을 변조 나. 영향 - LDAP 필터문을 조작하여 정보유출 및 정보조작 다. 보안대책 - 사용자입력값에 특수문자( = + # ; \ 등 ) 필터링 - 특수문자가 일반문자로 인식되도록 처리 (이스케이프) 라. 안전한 코드 1. 화이트 리스트로 URL 검증 String userSN = request.getParameter("usersn"); String userPass = request.getParameter("pass"); ... if ( !userSN.matches("[\\w\\s]*") || !userPass.matches("[\\w]*") ) { return; } String filter = "(&(sn=" + us..
가. 원인 - 외부입력값을 검증없이 XPath 쿼리문 생성에 사용된 경우 나. 영향 - 쿼리문의 의미 및 구조를 변경하여 임의의 쿼리를 실행 - 인가되지 않은 데이터를 열람 다. 보안대책 - 외부입력값에 특수문자( " [ ] / = @ 등 ) 및 쿼리 예약어를 필터링 - XPath대신 파라미터화된 쿼리문을 지원하는 XQuery 표현식을 사용 라. 안전한 코드 1. 입력값 필터링 String name = props.getProperty("name").replaceAll(" [ ', \\[ ] ", "" ); String pass = props.getProperty("pass").replaceAll(" [ ', \\[ ] ", "" ); String query = "//users/user[login/text..
가. 원인 - 외부입력값을 검증없이 XQuery 구문 생성 및 실행에 사용 나. 영향 - 쿼리문 조작을 통한 데이터 조회 및 인증우회 다. 보안대책 - XQuery에 사용되는 외부입력값에 특수문자 및 쿼리 예약어를 필터링 - 파라미터화된 쿼리문을 사용 라. 안전한 코드 1. 파라미터화된 쿼리문 사용 String name = props.getProperty("name"); String es = "doc('users.xml')/userlist/user[uname='$xname']"; XQPreparedExpression expr = conn.prepareExpression(es); expr.bindString( new QName("xname"), name, null); XQResultSequence resu..
가. 원인 - 외부 입력값을 검증하지 않고 외부 사이트로 자동연결 나. 영향 - 피싱사이트 연결 - 크로스 사이트 스크립트 공격 다. 보안대책 - 자동연결할 외부 사이트의 URL과 도메인을 화이트 리스트로 관리 및 사용 라. 안전한 코드 1. 화이트 리스트로 URL 검증 String allowedUrl[] = { "/main.do", "/login.jsp" }; int index = Integer.parseInt( request.getParameter("index") ); if ( index > -1 && index < allowedUrl.length ) { response.sendRedirect ( allowedUrl[ index] ); } 마. 진단방법 1. 외부 사이트로 리다이렉션 하는 함수나 메서..
가. 원인 - 업로드되는 파일의 안정성을 검사하지 않고 업로드를 허용 - 서버측에서 실행될 수 있는 스크립트 파일(ASP, JSP, PHP 등)이 업로드 가능하며 웹을 통해 직접 실행가능 나. 영향 - 시스템 내부명령어를 실행 - 웹쉘 업로드를 통해 서버를 장악 - 키로거를 설치하여 인증정보 획득 - 악성코드가 포함된 파일을 업로드하여 사용자 PC를 감염 다. 보안대책 - 화이트리스트 방식으로 허용된 확장자만 업로드를 허용 - 업로드 파일의 크기와 갯수를 제한 - 업로드 파일의 종류를 제한 - 외부에서 접근할 수 없는 경로(Web Document Root 밖에 위치)에 파일저장 - 업로드 파일의 저장경로 및 파일명을 외부에 노출 금지 - 업로드 파일의 실행권한을 제거 후 저장 라. 안전한 코드 1. 파일..
가. 원인 - 외부입력값을 검증하지 않고 운영체제 명령문의 일부 또는 전체로 구성되어 실행 나. 영향 - 공격자가 입력한 명령어가 웹서버 권한으로 실행 - 시스템 중요파일 삭제 - 백도어 실행 - 부적절한 권한변경 다. 보안대책 - 어플리케이션에서 운영체제 명령어를 실행하지 않도록 설계 - 미리 정의되어 있는 허용목록을 검색하여 명령어가 실행되도록 설계 라. 안전한 코드 1. 허용하는 명령어 목록 사용 List allowedCommands = new ArrayList(); allowedCommands.add("notepad"); allowedCommands.add("calc"); String cmd = args[0]; if ( allowedCommands.contains(cmd) ) { Runtime.g..
- Total
- Today
- Yesterday