1. 정의
원격으로부터 소스코드 또는 실행파일을 무결성 검사 없이 다운로드 받고 이를 실행할경우 발생하는 변조, DNS spoofing 또는 전송시의 코드 변조 등의 방법을 이용하여 공격자가 악의적으로 파일이나 코드를 변경할 수있다.
2. 안전한 코딩 방법
암호화하여 코드나 파일을 제공하고 이를 클라이언트가 검증하도록 한다.
3. 예시
다음은 URLClassLoader를 사용하여, 원격의 파일을 다운로드하는 예제이다. 다운로드 대상 파일에 대한 무결성 검사를 수행하지 않을 경우, 파일변조로 인한 피해가 발생할 수 있다.
공개키 방식의 암호 알고리즘을 통하여 전송파일을 암호화하고, 사용자는 이를 복호화 하여 변조 유무를 판단한다.
공개키 방식이란?
공개키 암호화 방식에는 비밀키와 공개키가 존재하는데 비밀키는 서버 쪽에 가지고 있으며 공개되어서는 안 되고, 공개키는 누구에게나 공개되어도 괜찮은 키이다. 먼저 클라이언트는 공개키를 통해 텍스트를 암호화하고 이는 비밀키로만 복호화할 수 있다 따라서 다른 사람이 정보를 가로채더라도 비밀키만 안전하다면 괜찮은 방식이다. (예시는 공개키를 통해 복호화함)
다음의 예에서는 파일을 다운로드할 때, 파일의 무결성에 대한 검사를 하지 않고 있다. 따라서 인증된 사이트로 위장하거나, 중간에 파일의 내용을 악의적으로 바꿀 경우, 이에 대하여 대처를 할 방법이 없다.
파일의 내용이 공개되어서는 안 될 경우는 모든 파일을 암호화 하지만, 공개되어도 괜찮은 경우네는 체크섬을 이용하여 파일의 내용이 변경되었는지 확인하는것이 더 효과적이다. 다음은 체크섬의 예시이다.
체크섬이란?
네트워크를 통해 전달된 값이 변경되었는지를 검사하는 값으로 무결성을 제공합니다.
전달되는 값이 중간에 오류 또는 해킹을 통해서 변질되는경우를 대비해 체크섬값을 같이 보내어 무결성을 확인합니다.
1. 수신측에서 IP헤더를 16비트씩 나눈다.
2. 나눈 비트중 체크섬은 메시지를 보낸쪽에서 체크섬을 구해서 포함시켜 보낸 값이므로 이 값으로 내가 구한 체크섬값과 비교하여 사용한다 그림에서 b1e6을 제외한 나머지 값을 다 더한다.
3. 캐리 값이 발생하였다면 더한다.
4. 1의 보수를 취한다.
5. 구한값과 전달받은 값을 비교한다.
'프로그래밍 > 시큐어코딩' 카테고리의 다른 글
[스프링 이해와 원리] #1. 난감한 Dao, DaoI? (0) | 2020.07.06 |
---|---|
[시큐어 코딩] #12. 적절한 인증 없는 중요기능 허용 (0) | 2020.07.06 |
[시큐어 코딩] #10 보호 메커니즘을 우회할 수 있는 입력값 변조 (0) | 2020.07.02 |
[시큐어 코딩] #9 정수 오버플로우 (0) | 2020.07.02 |
[시큐어 코딩] #8 HTTP 응답 분할 / CRLF (0) | 2020.07.02 |