현재 서버 기능중 이미지 업로드를 하는 기능에서 보안 문제가 염려됩니다.
웹 쉘과 같은 파일이 DB에 저장되면 안될거같은데 혹시 공격받아보신분이 있을까 하여 물어보러 왔습니다.
만약 공격받아서 DB에 웹쉘이 올라가면 이게 어떤 원리로 실행되는건지 궁금합니다.
백엔드에서는 알아보니까 인가되지 않은 사용자의 요청을 막는 스프링 시큐리티가 있더군요
백엔드에서는 공격방지용으로 이거정도만 써도 될지 궁금하네요
프론트엔드만 해와서 이번에 처음 스프링을 만져봐가지고 여기까지 왔네요 취준생이라 지식수준은 그렇게 깊지 않습니다..
백그라운드가 얼마나 되는지 모르겠네요. 일단 아~~~~무런 배경이 없다고 가정하에.. 스프링보다는 선사시대 cgi프로그램 생각하면 이해하기 쉽습니다. - 1) 공격자가 게시판에 첨부파일을 업로드. 이 파일은 보통 쉘스크립트나 php 등 서버측에서 실행가능한 파일 - 2) 업로드 후 공격자가 파일을 다운로드 - 3) 서버측에서는 파일을 http로 반환해야하는데, 이걸 "실행"후 결과값을 뿌려줌. (초창기 웹서버 취약점. 특히 초기 php에 많음) - 4) 웹서버가 root로 실행되는 경우, 스크립트 또한 자식프로세스로 포크, 부모와동일한 root로 실행되어 root 계정 탈취 가능 (이것도 선사시대) 뭐 이런식입니다...
위 예제에서 보다시피, 웹쉘이 비슷하게 동작하는거라 스프링 시큐리티로 "인가"된 사람이라도 공격가능해요. 스프링 시큐리티와 맥락이 다릅니다.
아 이해했습니다 그렇다면 보통 자기 서버를 가지고 배포하시는분들은 root계정이 아닌 배포용 계정을 만들고 배포하나요? 현재 배포중인 서버 운영체제는 리눅스입니다
인가된 사용자도 공격가능하면 그보다 더 근본적으로 차단해야겠네요..
현업에서는.. 그렇습니다. 웹서버 전용 계정을 생성하여 접근가능한 디렉토리 등을 다 지정합니다.(seLinux) 그런데 요즘은 k8s 컨테이너 환경이 대세라... 컨테이너 자체 권한 탈취해도 실제로 할 수 있는게 거의 없을 겁니다. 서버 죽이는거 말고는...
보안쪽은 일단... 인가쪽 / JWT만 알아도 충분합니다. 신입은... 더 깊게 안하셔도 되요 현업에서 배워야할 주제입니다.
데이터베이스 털려본 경험이 있는지라 좀 더 민감하게 받아들여지네요.. 알려주셔서 감사합니다. 사실 재미로 하는거라 뭐든 시도해볼거같긴합니다. 서버에 깃허브 토큰같은거 그냥 파일로 저장해두고 해서 털리면 꽤 곤란한 상황인지라.. 그리고 나중에 가지고 놀려면 알고 있어야할거같네요
어...gitops 하시면 시크릿(password, token) 관리는 github에 평문으로 저장하지 않아야 합니다. 컨테이너환경이면 sealed secret 사용하기도 하고 일반적으로 hashcorp사의 솔루션 돈주고 씁니다.
gitops가 뭔지 몰라서 잠깐 검색해보고왔네요 배포는 그냥 단순하게 로컬에서 빌드 파일 만들고 서버컴퓨터 백그라운드에서 실행하는 방식으로 하고 있습니다. 키나 민감한 정보같은건 그냥 제가 홈에 이것저것 텍스트파일로 저장해놓고 열면서 쓰는지라.. 안그래도 코드 바뀌면 매번 빌드하고 서버에서 실행하는게 번거로웠는데 이런게 있었군요