본문 바로가기

전체 글

(77)
[DevSecOps] 나만의 AWS DevSecOps Best Practice 제작 하기 - 1 이번 목표는 나만의 DevSecOps Best Practice를 제작하는 것이다. 기본적으로 DevSecOps라 함은 DevOps의 전 단계에 걸쳐 보안성을 확보하고자 노력하는 환경 또는 문화를 의미하는데, 단어 정의 자체가 조금은 두루뭉술하다보니, 누구나 쉽게 이해할 수 있는 상세한 DevSecOps Best Practice를 제작하고자 한다.(다만 AWS에 한정된)물론 모든 환경에 적용할 수는 없고 이것이 진짜 Best Practice일지 명확히 알 수는 없지만, 최대한 정략적인 데이터 비교를 통해 정보의 신뢰성을 확보하는 방향을 진행할 것이다.먼저 DevSecOps에 대하여 짚고 넘어가기 전에, DevOps에 관련하여 용어정의를 명확히 하고 넘어가고자 한다.DevOps 정의AWS : DevOps는..
[DevOps 구축하기 4] Github Webhook 설정, DevOps 구축 완성 https://tomatohj.tistory.com/82 에서 이어집니다. 이전에 설명했듯, Jenkins는 Github로 부터 Repository에 변화가 있음을 알아채고, 빌드/배포 과정을 진행할 것이다. 그렇다면 Github은 어떻게 Jenkins에게 그 정보를 전달 할 수 있을까? 답은 바로 Github Webhook에 있다. Github Webhook을 이용하면 Repository에 발생하는 이벤트들을 특정 URI로 전달할 수 있다. Fork 해온 Repository로 가서, 우측 상단 Settings 메뉴를 클릭한다. 그리고 왼쪽 메뉴 중 Webhooks메뉴를 선택한 뒤, 우측 상단 Add webhook을 클릭한다. Webhook을 추가하기 위해서는 Repository의 변경사항을 전달할 UR..
[DevOps 구축하기 3] Blue/Green 웹 서버 + Nginx 리버스 프록시 설정 https://tomatohj.tistory.com/81 에서 이어집니다. 이제는 실제로 배포할 웹 서버 2대를 구성할 것이다. Jenkins를 이용해서 Blue/Green 형태의 무중단 배포를 구현할 것이기에, 동일한 환경의 컨테이너 2개를 생성한다. 'docker run -it --name [이름] ubuntu' 명령어로 이름만 다른 2개의 컨테이너를 생성한 뒤, 2개 컨테이너 모두 'apt update && apt install -y vim net-tools openjdk-17-jdk ssh psmisc'를 수행한다. 이 과정을 통해 웹 서버에서 필요한 모든 패키지를 다운로드 받게 된다. 2개 서버 모두 설치가 끝나면. 'service ssh start' 명령어를 실행시켜 ssh server를 동작..
[DevOps 구축하기 2] Jenkins와 Github 연결하기 https://tomatohj.tistory.com/80에서 이어집니다. 설치된 Jenkins의 좌측 상단 '새로운 Item' 버튼을 클릭한다. 이름은 자유롭게 설정하고 종류는 'Freestyle project'를 선택한 뒤 OK 버튼을 누른다. 소스 코드 관리쪽으로 이동하여 Git을 선택하면, 연결할 Repository URL과 Github 인증을 위한 정보를 추가해야함을 알 수 있다. Github으로 이동하여 이 정보들을 알아내보자 환경 구성에 이용할 웹 애플리케이션은 WebGoat라는 오픈소스 웹 애플리케이션이다. 아래 링크로 접근하면 Github에 올라가 있는 공식 Repository를 확인할 수 있다. https://github.com/WebGoat/WebGoat GitHub - WebGoat/..
[DevOps 구축하기 1] Jenkins 설치 및 초기 설정 아래 그림과 같이 간단한 DevOps 아키텍처를 Docker를 이용하여 로컬 환경에 구성할 것이다. 로컬 환경에 Docker를 이용하여 구축할 것이므로, Linux가 아닌 Windows나 Mac이라면 Docker Desktop을 필요로 한다. (Linux는 바로 Docker Engine을 설치하면 된다.) 가능하다면 모든 컨테이너는 Stop(종료) 상태로 진행하는 것을 추천한다. 예상치 못한 오류를 예방할 수 있는 가장 좋은 방법이기 때문이다. VirtualBox나 Vmware와 같은 가상머신으로는 동일한 환경을 구성할 수 없으니 반드시 Docker를 이용해야한다. 'docker run -it --name jenkins -p 8080:8080 ubuntu' 명령어로 Jenkins 실행을 위한 ubuntu..
[WebGoat] Injection-Cross Site Scripting 풀이 이번챕터는 XSS에 대한 내용을 담고있다. 원래 XSS는 Injection과 별개로 OWASP에서 항목이 있었는데, 2021 항목에서 Injection에 포함되었다. XSS도 어찌보면 클라이언트사이드 코드 인젝션처럼 볼 수 있으니, 이해가 된다. 문제 풀어보자. (첫번째 문제는 그냥 체크박스 클릭만 하면 되기때문에, 그냥 넘어가고 다음문제부터 풀이하겠다) Reflected XSS 문제이다. alert나 console.log를 실행시키면 되는 문제인데, 일단 지금 당장은 공격을 할 부분이 마땅히 보이지 않으니, Purchase를 눌러보자. Purchase 버튼을 누르니, 추가 정보가 서버로부터 응답되었다. 응답된 정보를 살펴보다보니, 입력되어있던 credit card number가 응답값에 노출됨을 확인할..
[WebGoat] Injection-Path traversal 풀이 Path traversal 취약점에 대한 챕터이다. 한글로는 경로 탐색 또는 디렉터리 탐색 취약점이라고 한다. 쉽게 설명하면 개발자가 의도한 경로에서 임의로 벗어나 어떠한 행위를 하거나 정보를 조회하는 등의 행위를 할 수 있는 취약점을 의미한다. 문제를 한번 보자. 첫번째 문제를 보니... 임의의 경로에 파일을 업로드하면 풀리는 문제로 보인다. 우선 파일을 업로드 할 수 있는 부분은 프로필 사진밖에 없으니, 프로필 사진을 업로드 한 뒤 Update를 시도해보자 파일명 testtesttest.png를 이용해 업로드했는데, 응답을 보니 /root/.webgoat-2023.3/PathTraversal/testtest/asdf 경로에 저장된다고 한다. 보아하니 testtest까지는 고정이고 그 뒤 경로는 Ful..
[WebGoat] Injection-SQL Injection (mitigation) 풀이 이번엔 SQL Injection 대응 방안에 대한 내용이다. Static Queries 방법을 사용했을때 문제가 발생하고, 우리는 Parameterized Queries 방법이나 아니면 정적인 쿼리만을 수행하는 Stored Procedures 방법을 사용하면 된다. Stored Procedure란 실행시킬 쿼리를 하나의 명령어처럼 만들어서, 이를 호출해서 사용하도록 하는 방식이다. 주로 Safe Stored Procedure 방식을 사용하기에, SQL Injection으로 부터 보호받을 수 있으나, 간혹 Injectable하게 procedure안에 또 다른 쿼리를 넣어 dynamic하게 만드는 실수를 하는 개발자분들이 있다. 이 경우 SQL Injection으로부터 위험해진다. 또 여기 설명은 되어있지 ..