티스토리 뷰

보안

Python 인젝션

warpmemory 2016. 8. 10. 14:48

1. Command Injection

1.1. subprocess.call() function

  • subprocess.call(), shell=True 인 경우에 해당
  • shell=False 처리하고, 커멘드 라인 shlex.split() 처리

1.2. os.system() or os.popen*() function

  • os.system(), os.popen*() 경우에 해당
  • pipes.quote()를 사용하여, 변수(명령어 아규먼트), quote 처리한다.

2. Code Injection

2.1. exec() or eval() function

  • 위험성이 많기 때문에 가능하면 사용하지 않는게 좋다.
  • 사용해야 한다면, 받드시 들어올 수 있는 변수값을 체크 해야한다.

2.2. pickle or shelve module

  • Celery, Django 낮은 버전에서 메시지 전송시, 세션저장시 각각 pickle을 사용하기 때문에 보안 처리 해야한다.
  • 데이터 시리얼라이즈 시 json 또는 yaml(반드시 yaml.safe_load()를 사용)을 사용하도록 한다.

2.3. yaml

  • yml 설정 파일 인젝션이 가능
  • yaml.load() 대신, yaml.safe_load() 사용 해야한다.

3. SQL Injection

  • 문제는 믿지 못할 변수 이기때문에, Django or sqlalchemy 같은 ORM을 사용하는 것을 추천한다.

4. Information Leakage

  • print, logging 등을 사용할 때에는, 프로세스 및 로그 파일 등의 소유권 및 권한 설정을 한다.

5. Reference


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
페이지
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함