Problems - Brute Force Attacks, Data Handling and Logging

rang-dev·2020년 3월 19일
1

Problems - Brute Force Attacks

누군가가 비밀번호를 알아내기 위해 여러번의 로그인을 시도하고 마침내 비밀번호를 얻을 수도 있다. 이러한 공격을 brute force attack이라고 한다. 이 방법은 보기에는 어려워보이지만 실제로는 다음과 같이 간단하게 시도할 수 있다.

for attempt in random_strings:
    user = {'username':'target', 'password':attempt}
    r = request.post('{{host}}/login', data = user)

예측한 비밀번호 값들을 리스트로 만들어 반복적으로 로그인을 시도한다. 몇만개의 reqeust를 서버에 전송하는 것은 그렇게 긴 시간이 소요되지 않는다. 또한 운좋게도 예측한 값 중에 실제 패스워드를 얻어 걸릴 수도 있다.

이 공격을 막기 위해서는...

  • 바르지 않은 로그인 시도가 여러번 있다면 속도를 제한(Rate-Limit)하거나 막아라.
  • 흔한 비밀번호를 허용하지 마라.
  • 합리적인 password policy를 강제해라.(패스워드 길이, 특수문자 포함 등)
  • 공격을 기록(log)하고 모니터해라.

속도 제한의 대안: 보안 문자
때로는 여러 요청을 속도 제한 또는 거부하는 것이 해결책이 아니다. 대안은 CAPTCHA(completely automated public Turing test to tell computers and humans apart)이다. 보안 문자는 사람에게는 쉽지만 기계에는 어렵도록 설계되어있다. 이 경우 봇또는 스크립트가 여러 번의 시도를 통해 액세스를 시도하면 연결이 거부된다.
최근까지 이것은 사용자에게 읽기 어려운 형태의 텍스트를 입력하도록 요청함으로써 가장 일반적으로 수행되었다. 그러나 이 문제는 적대적이며 컴퓨터 비전의 발전으로 스크립트에 의해 패배했다. 당신의 사이트에 추가 될 수 있는 이 시스템의 현대적인 구현은 Google reCAPTCHA이다. 이 API는 방문자가 봇을 사용할 가능성을 당신의 사이트의 상호작용을 통해 0에서 1까지의 점수를 생성한다.

Problem - Data Handling and Logging

Serialization of Models

Serialization은 데이터 모델을 보다 쉽게 ​​공유되는 형식으로 변환하는 프로세스이다. 예를 들어, 이것은 일반적으로 서버로부터 정보를 요청하는 클라이언트로 JSON 객체의 형태의 응답으로 보낼 때 수행된다.

Database에서 object를 pull할 때, 이것은 사용자의 데이터를 포함할 것이다. 이 데이터에 패스워드와 같은 민감한 정보들이 포함되었을 수도 있다. Serialize를 할 때는 오직 task를 수행하는데에 필요한 중요한 데이터만 serialize해야한다. 즉, 민감한 데이터가 task에 필요하지 않다면 해당 task에서 그것을 serialize하지 않는다. 민감한 정보의 필요성을 최소화 해야한다. 만약 plain text password를 serialize했다면 이것은 위험성이 아주 크다.

Logging Best Practiecs

Application을 개발할 때 디버그를 돕는 도구나 시스템의 상태를 이해하기 위해 로그를 이용한다. 하지만 보안 취약점으로는 종종 간과되곤 한다.

다음과 같은 많은 이유에서 log가 보안을 돕기 때문에 우리는 로깅을 해야한다.

  • Information that leaves an audit trail(감사 추적)
    • Login Attempts(ids)
    • Login Source
    • Requested Resources

하지만 personally identifiable information, secrets, passwords는 절대 저장되어서는 안된다. 나쁜 의도를 가진 사람이 로그 파일을 얻게 되면 보안 위험이 매우 커지기 때문이다.

만약 이런 로그를 계속 방치하여 누군가가 이 정보에 엑세스할 수 있는 경우 security vulnerability이 발생한다.

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글