Java
-
Secure - CSRFJava/Spring 2018. 9. 10. 14:31
크로스 사이트 요청 위조 - CSRF 구매대행, 마일리지조작, 스팸대리발송 등 사용가능 해커가 가장 큰 공을 들여서하는 공격이다.방어하기가 XSS만큼 까다롭다. 중간에 발견되면 고치기가 힘들다. 설계 단계부터 없으면 많은 노력이 필요하다. 사이트가 신뢰하는 사용자를 통해서 해커가 원하는 명령을 대신 수행하게 만든다. 사용자의 의도와 상관없은 행동이 수행된다. CSRF는 약간의 공격으로 막을 수 없고 사이트 전체를 수정해야하기때문에 설계단계부터 설정해야 한다. ex) 추천수 조작 - 이미지태그에 추천수 링크를 경로로 잡고 사용자에게 보이지 않게하고 글을 올린다. 실제 사용자가 수행을 한 것인지 보증이되면 막을 수 있다. -> 막아야 될 곳이 많다. 실제사용자의 보증 -> 토큰이 필요하다. 로그인마다 사용자..
-
Secure - XSSJava/Spring 2018. 9. 10. 14:31
XSS - 크로스 사이트 스크립팅공격자가 악성 스크립트를 입력값으로 입력했다면 공격을 당하는 사용하는 해당 스크립트로 인해 쿠키 값이 유출되거나, 해당 사용자의 권한으로 웹 애플리케이션의 기능이 악용 또는 오용되거나, 또는 피싱 사이트로 유도되어 개인정보가 유출되는 경우가 발생될 수 있다. XSS 공격 유형 Reflective XSS공격자가 악성스크립트가 포함된 URL을 클라이언트에게 노출시켜 클릭하도록 유도하여 쿠키 정보를 탈취하거나, 피싱사이트, 불법 광고 사이트로 이동하게 한다. Stored XSS악성 스크립트를 DOCUMENT에 저장하여 해당 DOCUMENT 정보를 이용하는 애플리케이션을 통해, 시스템을 사용하는 모든 사용자들이 해당 스크립트를 실행하게 함으로써 사용자의 쿠키 정보를 탈취하거나 피..
-
Secure Coding - 패스워드 정책Java/Spring 2018. 9. 7. 15:10
패스워드 정책 - 3가지 종류 이상의 문자 구성으로 8자리 이상의 길이로 구성된 패스워드 - 2가지 종류 이상의 문자 구성으로 1자리 이상의 길이로 구성된 패스워드 (문자 종류는 알파벳 대문자, 소문자, 특수문자, 숫자) - 널리 알려진 단어를 포함하지 않기 - 사용자의 ID와 연관성이 있는 단어를 포함하지 않는 패스워드 - 개인정보는 가족이름, 생일, 주소 , 전화번호 등이 포함되지 않게 해야한다. 개인정보 이용 법으로 재정되있다. - 기업에서는 패스워드 정책을 내놨기때문에 사용자 입장에서 조건을 안맞추면 손해배상 명분이 힘들수도 있다. ( 3개월마다 비밀번호 변경 등 ) 대응기법모든 계정에 대해 공격자가 쉽게 추측할 수 없는 패스워드가 설정되도록 제약을 주어야 한다.아래는 일반적으로 권고되는 패스워드..
-
Secure Coding - Command InjectionJava/Spring 2018. 9. 7. 14:39
Command Injection Cmdi - .sh나 .bash 등 배치파일이나 커맨드 입력으로 injection 수행 Tools - Encoder/Hash -> programs=calc.exe&shutdown -t -s 36000 붙이고 URL Encoding programs%3Dcalc.exe%26shutdown -t -s 36000를 붙여놓고 요청을 수행한다. WhiteList기법을 이용해서 Cmdi를 방어한다. Runtime.getRuntime().exec("cmd.exe /c " + command); 로 OS에 명령을 실행한다. String command = request.getParameter("programs"); WhiteList 기법 -> Map을 사용한다. Map whiteList = ..
-
Secure Coding - SQL injectionJava/Spring 2018. 9. 7. 14:06
SQL injection SQLi 원인 -> 1. 입력과 검증을 하지 않아서 2. statement는 안전하지 않아서 perparestatement를 써야한다. admin으로 회원가입이 되는지 -> 로그인할 때도 비밀번호가 틀렸습니다 처럼 한방향이 아닌 아이디나 비밀번호가 틀렸습니다로 고치기 id에 admin' -- 를 주면 패스워드가 주석처리가 된다. 또는 id에 ' or 1 = 1 -- 를 하매도 인증이 성공된다. 1 = 1 이 참이니까 -- 뒤로는 무시하고 성공하게 된다. 테이블 컬럼 목록 출력 - id에 테이블쿼리를 입력한다. -> DB 테이블이 다 나온다. 테이블에 컬럼의 타입까지도 다 나온다. ADMIN' UNION ALL SELECT USER_ID USER_PASSWORD FROM USERS..
-
Secure Coding - ParosJava/Spring 2018. 9. 7. 12:23
Proxy Tool이다 설치 후 Paros 우클릭 - 속성에서 jdk가 32비트인 jdk폴더 안에 bin까지의 Path를 Paros에 적용 되있는 javapath까지의 경로로 복사시키고 적용하고 실행시킨다 Tool -> Options -> Local Proxy Port를 8888로 변경 후 OK Explorer -> 인터넷 옵션 -> 연결 -> Lan 설정 -> 프로시 설정 사용 주소 - localhost , 포트 - 8888 -> 고급 설정에서 예외된것이 있으면 없애고 확인 설정 확인 후 링크를 이동하면 안전하지 않은 사이트라고 페이지가 뜬다. 페이지를 이동하면 Paros에 기록이 남는다. Request와 Response를 볼 수 있다. Trap Request Check하고 login 버튼을 누르면 i..
-
Secure Coding - 보안 취약점 관리 사이트Java/Spring 2018. 9. 7. 10:24
CWE ( Common Weakness Enumeration ) 미 국토 안보우에서 관리하는 웹에 관련된 보안 취약점들을 모아 놓은 사이트 http://cwe.mitre.org 무엇을 탈취하는 공격인지, 어떤 코드가 있으면 어떤 취약을 발생한다. 등 설명이 디테일하게 작성되있다. CVE ( Common Vulnerabilities and Exposures ) http://cve.mitre.org CWE : 일반적인 취약점의 분류 체계 CVE : 발견된 보안 취약점의 히스토리 SANS ( SysAdmin, Audit, Network, Security ) http://sans.org 가장 위험한 25가지 취약점을 정리한 목록 취약점을 줄이거나 완화할 수 있는 주요 완화방법 제시 구성요소간 안전하지 않은 상호..