Rails 보안

Jinsu Kim·2021년 7월 1일
0

세션

세션이란 무엇인가?

어플리케이션은 섹션을 갖는것으로 많은 유저가 어플리케이션과 주고받음을 가능하게 하고, 각 유저 고유의 스테이터스를 유지 해준다.
예를 들어 유저가 인증을 1회 하는 것으로 이후의 리퀘스트로는 다시 로그인 할 수 있게 해줍니다.

그래서 그게 왜 좋은대??

만약 센션이 없다면 유저를 인식, 인증할때 마다 리퀘스트를 발행해야 하는 번거로움이 생깁니다. 한번 인증하고 난 뒤에 인증이 필요 없어진다면 기다리지 않고 바로 사이트를 이용할 수 있게 되죠!

Rails의 경우

어플리케이션에 접속한 유저별로 섹션 오브젝트를 1개씩 제공 합니다.
유저가 벌써 어플리케이션을 이용하고 있다면 Rails에서는 기존의 섹션을 읽어들입니다.
만약 이용하고 있지 않은 경우 새로운 섹션을 작성합니다.

세션과 쿠키의 관계(향후 추가적으로 작성예정)

섹션은 cookie내의 섹션 id에 의해서 식별 가능하다
cookie는 Web 어플리케이션의 일시적인 인증기능을 제공하고 있다.

2.2 세션 하이재킹(hijeck)

섹션이란 기능으로 편리함을 얻을 수 있지만 당연히 조심해야 되는 점도 있습니다.
소제목으로 나온 섹션 하이재킹인대요. 유저의 세션ID가 도둑맞으면 공격자는 해당 유저인 을 하고 Web Application을 이용할 수 있게 됩니다.
즉 내 이름 내 카드로 다른 사람이 자유롭게 구매가 가능하게 될 수 도 있는것을 이야기 합니다.

세션 하이재킹의 수단과 대책

  1. 무선 LAN에서는 접속되어저 있는 클라이언트 전체의 트래픽을 보는 것이 가능합니다. 따라서 암호화 되어저있지 않은 무선 LAN의 경우에는 간단하게 보는 것이 가능합니다.
    따라서 WEB어플리케이션 개발자의 경우에는 SSL에 의한 안전한 접속 제공이 필수로 이루어저야합니다.
    Rails3.1 이후에서는 어플리케이션의 설정 파일에 SSL접속을 강화되어져있습니다.
config.force_ssl = true
  1. 마지막으로 컴퓨터를 사용하는 유저가 Web 어플리케이션에서 로그아웃 하는 걸 까먹는 것은 자주 있는 일입니다. 그 다음으로 사용하는 유저는 Web 어플리케이션을 그 대로 사용할 수 있게 됩니다. 따라서 유저에는 로그아웃 버튼을 꼭 제공해야합니다! 그것도 가장 눈에 잘 보이는 버튼으로 말이죠!!

  2. 크로스 사이드 스크립팅(XSS) 공격의 대부분은 유저의 cookie를 손에 얻는 것이 목적이다.
    XSS의 자세한 내용은 추후에 작성할 예정입니다.

  3. 공격자가 자신이 모르는 cookie를 일부로 훔치는 것 대신에 자신이 알고 있는 cookie의 세션id를 고정해 버리는 공격방법도 있습니다. 자세한 내용은 더 아래에서 다루도록 하겠습니다.

대부분의 공격자의 목적은 돈을 벌기위해서라고 합니다 Symantec Global Internet Security Threat Report에 의하면 도둑 맞은 은행계좌를 어두운 세계(뒷거래)에 판다면 대 부분 10달러에서 1000달러 정도라고 합니다. 신용카드번호의 경우 0.4 달러에서 20달러, 온라인 옥션 사이트 계정의 경우 1달러에서 8달러, 전자메일의 패스워드는 4달러에서 30달러 정도에 매매되어지고 있다고 합니다.

2.3 세션 스토리지

Rails는 디폴트의 세션 스토리지로서 ActionDispatch::Session::CookieStore을 사용하고 있습니다.

Rails의 CookieStore는 클라이언트쪽의 cookie에 섹션해쉬를 보존하고 있습니다. 서버는 섹션해쉬를 cookie에서 취득하는 것으로 sessionID의 필요성을 삭제하고 있습니다. 어플리케이션의 스피드는 현저하게 빨라지지만 이 스토리지 옵션에 대해서는 논란의 여지가 있기 때문에 세큐리티상의 이미나 스토리지 제약에 대해서는 이하의 점을 충분히 알려주지 않으면 안됩니다.

  1. cookie의 상한은 4KB라는 점입니다. 세션에 관련되어있는 데이터를 보존하는 목적으로만 cookie를 이용하여 주세요.

  2. cookie는 클라이언트 쪽에 보존 되어집니다. cookie의 기한이 끝난 경우에도 cookie 내용이 남겨저 있는 경우가 있습니다. 또는 클라이언트의 쿠키가 다른 컴퓨터에 copy되어질 가능성도 있습니다. 세큐리티상의 중요한 데이터는 cookie에 보존하는 것은 피해주세요.

  3. cookie는 본질적으로 일시적인 정보이다. 서버에는 cookie의 기한을 설정할 수 있고 기한이 끝나기 전에 cookie나 cookie의 내용이 클라이언트 쪽에 삭제 되어질 가능성이 있습니다. 항상성이 높은 데이터는 모든 서버쪽에서 영속화할 수 있도록 해주세요.
    항상성: 변수들을 조절하여 내부 환경을 안정적이고 상대적으로 일정하게 유지하려는 계의 특성을 말한다.

  4. 세션cookie는 혼자서 실효되는 것은 없기 때문에 악의적인 목적으로 사용되어질 가능성도 있습니다. 보존이 끝난 타임스크립트를 이용하여 오래전 세션cookie를 어플리케이션에 실효하는것도 좋은 방법일지도 모릅니다.

  5. Rails는 cookie를 디폴트로 암호화 합니다. 클라이언트는 암호를 해독하지 않는 이상 cookie의 내용을 읽어들이는 것이나 편집하는 것도 불가능 합니다. 비밀정보를 적절히 사용한다면 cookie의 세큐리티는 일반적으로 지켜지고 있다고 생각해도 좋습니다!

WhiteList and Blacklist

https://sugerent.tistory.com/135

profile
Ruby와 js로 첫 커리어를 시작하였고 3년차 엔진니어입니다! vim에 관심이 많습니다!

0개의 댓글