Upload
junbum-lee
View
31
Download
1
Embed Size (px)
Citation preview
TWO Scoops of Django
26장: 실전보안 방법론
Two Scoops of Django 26장: 실전보안 방법론 1
서버를 견고하게 하자
간단히는 SSH포트 변경부터,불필요 서비스 끄기
Q. NMAP등 포트 스캐닝은 어떻게 막나?
Two Scoops of Django 26장: 실전보안 방법론 2
장고가 가진 보안기능
XSS 보안
CSRF 보안
SQL 인젝션 보안
클릭재킹 보안
보안쿠키: TLS/HTTPS/HSTS지원
SHA256+PBKDF2 Password
HTML Escaping
XML 폭탄 방어
Two Scoops of Django 26장: 실전보안 방법론 3
settings.py에서 DEBUG=FalseALLOWED_HOST 등록 (사용하는 도메인만!)이거 안해주면 SuspiciousOperation 발생 가능성 높음.
SECRET_KEY 안전하게 보관하기 (dev!=deploy)환경변수로 다루기 or envs.json으로 독립관리
깃헙 등 버전관리 시스템에서 이런 정보들 다루지 않아야 함
온라인에 올라간순간 내 것이 아님
Two Scoops of Django 26장: 실전보안 방법론 4
사이트는 전부 HTTPS 이용하기로그인은 당연히 HTTPS
사이트 전체 HTTPS시 Static Serving도 HTTPS이렇게 하지 않으면 "Insecure Resource" 경고 뜬다.
HTTP로 접속시 HTTPS로 리다이렉트
웹서버(Apache/NginX)가 하게 하는게 제일 낫다.
안되는 상황이라면 Django 미들웨어 이용.단 이 경우는 Static HTTPS는 따로 처리해주기
settings.MIDDLEWARE_CLASSES = [django.middleware.security.SecurityMiddlewaresettings.SECURE_SSL_HOST = True
Two Scoops of Django 26장: 실전보안 방법론 5
안전하게 쿠키 쓰기HTTPS 외 접속에선 쿠키 전송하지 못하게 하기
SESSION_COOKIE_SECURE = TrueCSRF_COOKIE_SECURE = True
쿠키 기반 세션 주의 (쓰지 않기)Django는 DB세션 기반 Or 캐시세션 기반
쿠키는 얼마든지 사용자가 조작가능하다!
공격자가 SECRET_KEY를 알 수도 있다.
Two Scoops of Django 26장: 실전보안 방법론 6
HSTS 이용하기HTTP Strict Transport Security
웹 서버 레벨에서 설정
HSTS기간을 신중하게 설정할 것.잘못 설정하면 사이트 도메인을 아예 바꿔야 함.
Two Scoops of Django 26장: 실전보안 방법론 7
HTTPS에도 수준이 있다모질라에서 하라는 �로 해보자
HTTPS 테스트하기
https://www.ssllabs.com/ssltest
Two Scoops of Django 26장: 실전보안 방법론 8
XSS방어Django에서는 기본적으로 HTML Escaping으로 방어
장고 템플릿 이용하기 (mark_safe X)
사용자가 HTML입력 할수 없게 만들기
JSON으로 데이터 주고받기 (파이썬 객체 넣기 X)
Two Scoops of Django 26장: 실전보안 방법론 9
파이썬 코드 인젝션기본 내장함수 중 eval(), exec(), exec�le()은아주 신중하게 사용할 것
pickle로 직렬화된 입력값을 역직렬화 하지 말 것
YAML문서 사용시 yaml.safe_load()만 사용할 것
Two Scoops of Django 26장: 실전보안 방법론 10
민감한 정보 필드는 자동완성 Xfrom django import forms
class SpecialForm(forms.Form): my_secret = forms.CharField( widget=forms.TextInput(attrs={'autocomplete': 'off'}))
이와 같이 폼 필드 자체를 PasswordInput으로 만들기도
방법.
from django import forms
class SpecialForm(forms.Form): my_secret = forms.CharField( widget=forms.PasswordInput())
Two Scoops of Django 26장: 실전보안 방법론 11
사용자가 올린 파일은 다른 곳에아예 다른 도메인을 가진 곳 이용하기
CDN: 안전하고 빠르다
Content-Disposition: attatchement
통해서 브라우저에서 인라인으로 보이지 않게 설정
업로드 받은 파일은 실행 권한 없는 폴더에 두기
파일 확장자를 화이트리스트로 관리
파일이 악의적이면 Form Validation도 이미 늦음(to_python()실행이 이미 되어버림)
File validation (FileField / ImageField)Two Scoops of Django 26장: 실전보안 방법론 12
ModelForm에는 Meta.�elds이용
Meta.exclude 사용시 �량 매개변수 입력 취약점 생김
�량매개변수입력취약점
https://www.kevinlondon.com/2015/10/16/answers-to-django-security-questions.htmlDjango1.6 미만의 버전에서는 ModelForm에서 �eld정의 않을 경우 취약점 있음1.6이상에서는 �eld명시 않을 경우 장고단에서 막음exclude를 쓰지맙시다
exclude사용시 model변경시마다 Form을 새로 작성귀찮
Two Scoops of Django 26장: 실전보안 방법론 13
SQL Injection 피하기장고에서는 기본적으로 SQL Injection을 방어해준다
단 raw Query를 날리는 경우(ORM을 배제한 경우) SQLInjection에 취약해 질 수 있음
ORM Method중에서도 raw(), extra()는 주의해야함
전달되는 Parameter를 Escaping해줘야 한다
사용자 입력값을 바로 넣으면 안된다
Two Scoops of Django 26장: 실전보안 방법론 14
서버에 민감한 정보 저장하지 않기신용카드정보 >> Paypal 등 결제 �행사에 맡길 것
만약 꼭 저장 하는 경우가 필요하다면 PCI-DSS보안표준그리고 PCI 규약을 체크하자. 돈이 많이든다
암호화한다 하더라도 저장하지 말자
개별적인 ID/PW를 관리하기 >> SocialAuth
구Ú / 페이스북 / 깃헙 / etc...
Two Scoops of Django 26장: 실전보안 방법론 15
12개의 PCI-DSS 요구사항 개요
https://aws.amazon.com/ko/compliance/pci-dss-level-1-faqs/Two Scoops of Django 26장: 실전보안 방법론 16
장고 어드민 관리하기기본 url 변경하기
django-admin-honeypot 이용하기
어드민 페이지는 HTTPS그냥 사이트 전체 HTTPS �시다
admin접속에는 화이트리스트 IP만 접속 가능하게
장고 어드민 문서 Url을 /admin/doc에서 다른거로 변경
Two Scoops of Django 26장: 실전보안 방법론 17
사이트 모니터링하기
Q. 여러분은 어떻게 Django사이트를 모니터링중이신가요?
Two Scoops of Django 26장: 실전보안 방법론 18
의존성 패키지 최신으로 유지하기requires.io 를 이용해 최신 버전 체킹하기
PyCharm의 패키지 매니저에서도 관리 가능
클릭재킹 예방하기장고에서 기본적으로 예방하도록 동작함
DefusedXML로 XML폭탄막기lxml같은 라이브러리도 XML공격에 취약함
Two Scoops of Django 26장: 실전보안 방법론 19
이중인증 쓰기OTP / TOTP
email Token
SMS
django-two-factor-auth
Two Scoops of Django 26장: 실전보안 방법론 20
강한 패스워드 사용하기문자 + 숫자 + �문자 + 특수기호
길이 1X자 이상
django-passwords
django-autoadmin
Two Scoops of Django 26장: 실전보안 방법론 21
사용자들의 보안 리포트 받기
Two Scoops of Django 26장: 실전보안 방법론 23
remove_tags 사용 금지1.10에서 이미 사라짐
�신 bleach를 사용하자
Two Scoops of Django 26장: 실전보안 방법론 24
만약 실제 보안 문제가 생겼다면서버를 멈추고
정적으로 바꾼다음에
백업을 시작하고
djangoproject팀에 연락한 후
문제를 살펴보자
Two Scoops of Django 26장: 실전보안 방법론 25
서버를 멈추고 나서
heroku등에서 maintance:on
503 관리중 페이지 띄우기
django-db-tools 로 DB를 읽기전용으로 변환
django-readonly-site
정적 HTML '보수중'페이지 띄우고
백업을 한다
테스트 + CI를 통해 빠른 보수 & 테스트Two Scoops of Django 26장: 실전보안 방법론 26
알아보기 어려운 PKmodels.UUIDField를 pk로 사용
문제: 느려진다
실시간 보안 뉴스 확인하기트위터
해커뉴스
보안 관련 질문은 장고 커뮤니티로!Two Scoops of Django 26장: 실전보안 방법론 27
FIN
Two Scoops of Django 26장: 실전보안 방법론 28