반응형
경로조작 및 자원삽입 공격 설명
외부 입력값을 통해 파일 및 서버 등 시스템 자원에 대한 접근 또는 식별을 허용할 경우, 입력 값 조작을 통해 시스템이 보호하는 자원에 임의로 접근할 수 있는 보안취약점.
공격자는 게시글 혹은 데이터의 수정, 삭제, 정보노출, 시스템 장애 등을 유발 할 수 있음.
즉, 공격자가 허용되지 않은 권한을 취득하여 설정에 관계된 파일을 변경하거나 실행시킬 수 있는 공격
경로조작 시큐어코딩 예시
필터링 적용 예(Django프레임워크)
def get_info(request):
# 외부 입력 값으로 받은 파일 이름은 검증하여 사용한다
request_file = request.POST.get('request_file')
filename, file_ext = os.path.splitext(request_file)
file_ext = file_ext.lower()
if file_ext not in ['.txt', '.csv']:
return render(request, '/error.html', {'error':' .'}) 파일을 열수 없습니다
# 파일 명에서 경로 조작 문자열을 필터링 한다(/ . \\을 공란으로 변환)
filename = filename.replace('.', '')
filename = filename.replace('/', '')
filename = filename.replace('\\', '')
with open(filename + file_ext) as f:
data = f.read()
설명
1. request_file을 받았을 때 filename과 file_ext로 문자열을 변수로 받고 filename에서 . / \\이 있을 경우 공란으로 변환시킨다.
2. 필터링은 replace함수 외 re.sub, filter함수를 사용하여 필터링 할 수 있다.
Tip. Django외 다른 프레임에서도 필터링을 하는 방법을 사용하여 경로조작을 예방하는 방법이 있다.
자원삽입시큐어코딩 예시
화이트리스트로 필터 적용(Django프레임워크)
ALLOW_PORT = [4000, 6000, 9000]
def get_info(request):
port = int(request.POST.get('port'))
# 사용 가능한 포트 번호를 화이트리스트로 제한
if port not in ALLOW_PORT:
return render(request, '/error', {'error':' '}) 소켓연결 실패
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('127.0.0.1', port))
......
return render(request, '/success')
설명
ALLOW_PORT라는 리스트를 만들어 포트번호를 설정하고, 사용가능한 요청한 포트번호가 다를 경우 연결제한 하였다.
경로조작, 자원삽입 공격 예방 정리
1. 경로를 순회하여 공격할 수 있는 위험이 있는 문자(/, \, .. 등)를 제거할 수 있는 필터를 이용한다.
2. 외부 입력값을 자원식별자로 사용하는 경우 적절한 검증을 한다.
3. 사전에 정의된 리스트(화이트리스트)에서 선택되도록 한다.
반응형
'IT > 앱사용방법' 카테고리의 다른 글
한글 보안저장 문서 수정 못하게 하는 방법(pdf 저장 아님) (0) | 2022.06.13 |
---|---|
시큐어코딩) 파이썬 파일 업로드 공격 예방 하는 방법(기초) (0) | 2022.06.02 |
XSS와 CSRF 차이점 설명과 사용자가 공격 예방하는 방법 (0) | 2022.05.31 |
시큐어코딩) 파이썬 코드 삽입 공격 예방 코드 설명(기초) (0) | 2022.05.21 |
시큐어코딩) 파이썬 SQL 인젝션 공격 예방코드 기초 (0) | 2022.05.19 |