넓은 범위로 SW 개발생명주기의 각 단계별로 요구되는 보안활동을 의미

SW 개발보안은 개발자 실수, 논리적 오류 등으로 인해 SW에 내포될 수 있는 보안취약점의 원인 즉 보안약점을 최소화하는 일련의 보안활동을 의미한다.
우리는 이러한 시큐어코딩을 통해 안전한 개발을 진행하여야 한다.

데이터베이스와 연동된 웹 어플리케이션에서 입력된 데이터에 대한 유효성 검증을 하지 않았을 경우, 공격을 받을 수 있다.

외부로부터 인자를 받는 개체를 상수 스트링으로 생성하고 인자부분을 setXXX 메소드를 설정하여 외부의 입력이 쿼리문의 구조를 바꾸는 것을 방지
web 생태계에서는 SQL Injection을 url을 통해 해킹을 시도한다.
예를 들어 http://~~~.com/login?id=test&pw=password 와 같이 시도를 한다.
그렇다면 해당 건과 같이 spring에서 모든 sql injection에 대해 진행하여야 하는가?
정답은 아니다.
WAF 로 해결하도록하자.

외부 입력값을 검증하지 않고 시스템 자원에 대한 식별자로 사용하는 경우, 공격자는 입력값 조작을 통해 시스템이 보호하는 자원에 임의로 접근하거나 수정할 수 있고 잘못된 입력값으로 인해 시스템 자원 사이에 충돌이 발생할 수 있다.

자원에 접근할 경우에는 외부 입력값에 포트번호와 같은 식별자로 직접 사용하는 것을 바람직하지 않으며
꼭 필요한 경우에는 가능한 리스트를 설정하고 해당 범위 내에서 할당되도록 작성한다.
자원 삽입의 case는 backend 개발시 유의하여야 한다.
일반적으로 gateway 를 통해 validation을 모두 확인하고 진행하는 것이 맞으나, api g/w를 두지 않는다면 DTO가 해당 자원삽입을 체크할 수 있을 것이다. spring개발에서는 sonarqube , intelij사용시에는 sonarlint 를 통해 정적분석에 도움을 받으면 더욱 좋다.

웹 페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도할 수 있다.
웹페이지를 열람하는 접속자의 권한으로 부적절한 스크립트가 수행되어 정보유출 등의 공격을 유발할 수 있다.

외부 입력 문자열에서 replaceAll 메소드를 사용하여 <> 와 같은 HTML 스크립트 생성에 사용되는 모든 문자열을 변경함으로써 악의적인 스크립트 실행의 위험을 줄인다.
CORS 처리하지 않게 실행하도록 처리
https://evan-moon.github.io/2020/05/21/about-cors/
CORS란 다른 사이트에서 해당 서버에 접근을 방지하는 것을 의미한다. 다른 사이트라는 것을 판단하는 기준은 간단하다. 같은 도메인(포트가 다를경우는 브라우저에 따라 다름)을 기준으로 처리한다.
해당 CORS를 허용을 최대한 하지 않는 이유는 XSS/CSRF와 같이 브라우저내에 악성 스크립트로 해킹이 가능하기 때문이다.
spring에서는 컨트롤러 단에 @CrossOrigin 대신 @CrossOrigin(origins = "http://domain1.com, http://domain2.com")을 활용하여 조금더 보안을 중점하도록 하자.

적절한 검증절차없이 운영체제 명령어의 일부 또는 전부로 구성되어 실행되는 경우 의도하지 않은 시스템 명령어가 실행되어 부적절하게 권한이 변경되거나 시스템 동작 및 운영에 악영향을 미칠 수 있다.

정의된 인자값의 배열을 만들어 두고 외부입력에 따라 적절한 인자값이 선택되도록하여 부적절한 입력이 되는 가능성을 막는다.
만약 온프로미스가 아닌 aws cloud사용을 한다면 guardduty를 활용하도록 하자. 삶이 편해질것이다.

서버에서 실행 될 수 있는 스크립트 파일 (asp/jsp/php)이 업로드 가능하고 이 파일을 공격자가 웹을 통해 실행시킬수 있는 경우 공격자는 스크립트 파일을 업로드하고 이 파일을 통해 시스템 내부명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수있다.

업로드할 파일에 대한 유효성검사를 통해 파일을 공격자가 업로드하거나 전송을 피해야한다.
만약 온프로미스가 아닌 aws cloud사용을 한다면 macie 활용하도록 하자. 삶이 편해질것이다.

SW가 모든 가능한 실행경로에 대해서 접근제어를 검사하지 않거나 불완전하게 검사하는 경우 공격자는 접근 가능한 실행경로를 통해 접근하여 정보를 유출할 수 있다.

인증절차를 통해 접근을 하여 처리한다.
인증서버를 aws 서버라고 판단하면
어카운트 전체 탈취는 꽤나 어렵지 않는 일이다.
따라서 IAM 보안을 OTP까지 처리하도록 하자.

Base64와 같은 간단한 인코딩함수를 사용하는 것으로는 패스워드를 제대로 보호할수없다.
RC2, RC4, RC5, Rc5 rc6, md4, md5, sha1, des 알고리즘이 해당된다.
3des, aes, seed 등의 안전한 암호알고리즘으로 사용을 권장한다.

인증서버를 aws 서버라고 판단하면
어카운트 전체 탈취는 꽤나 어렵지 않는 일이다.
따라서 IAM 보안을 OTP까지 처리하도록 하자.

프로그램이 보안과 관련된 민감데이터를 평문으로 통신채널을 통해서 송수신 할 경우 스니핑을 통해 민감데이터를 노출될 수 있는 취약점이 있을 수 있다.

서버에 전송하기 전에 암호화를 수행하여 진행한다.
SSL/TLS 등 항상 최신으로 처리
좋은 글 감사 드립니다.