Skip to content

Commit 45fbf5a

Browse files
committed
docs: SC(6-1)
1 parent 1b52336 commit 45fbf5a

File tree

10 files changed

+240
-10
lines changed

10 files changed

+240
-10
lines changed

_posts/2025-09-05-SC(1-2).md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ last_modified_at: 2025-09-05
1616
---
1717
📚**<span style="color: #008000">행정안전부 SW개발보안 가이드</span>**: 행정기관 등이 안전한 소프트웨어를 개발하여 각종 사이버위협으로부터 예방, 대응하기 위해 SW 개발단계 부터 SW개발 보안을 적용하기 위한 기준으로 제공
1818

19-
![alt text](SWguaid.png)
19+
![alt text](../assets/img/SC/SWguaid.png)
2020

2121
* **대상**: 정보 시스템 감리 대상 정보화 사업
2222
* **범위**: 설계단계 산출물 및 소스코드 전체
2323

24-
![alt text](SWguaid1.png)
24+
![alt text](../assets/img/SC/SWguaid1.png)
2525

26-
![alt text](SWguaid2.png)
26+
![alt text](../assets/img/SC/SWguaid2.png)
2727

2828
* 2020년에는 SW산업진흥법이 개정되어 민간 기업 SW개발시 SW개발보안을 적용하도록 함
2929

@@ -40,8 +40,8 @@ last_modified_at: 2025-09-05
4040
5. 시스템 개발 및 운영 보안
4141
6. 취약점 관리
4242

43-
![alt text](saasCASP.png)
43+
![alt text](../assets/img/SC/saasCASP.png)
4444

45-
![alt text](saasCASP1.png)
45+
![alt text](../assets/img/SC/saasCASP1.png)
4646

47-
![alt text](saasCASP2.png)
47+
![alt text](../assets/img/SC/saasCASP2.png)

_posts/2025-09-12-SC(2-1).md

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ last_modified_at: 2025-09-12
1313
>🔒 시큐어 코딩 수업 정리
1414
1515
## SW개발보안 방법론
16-
---
1716
📚**<span style="color: #008000">SW개발보안 방법론</span>**: 소프트웨어 개발 과정에서 보안성을 강화하기 위해 적용하는 접근 방식
1817
* **소프트웨어 개발 생명주기(SDLC: Software Development Life Cycle)** 전반에 걸쳐 보안 요구사항을 반영하고, 취약점을 예방하는 것을 목표로 함.
1918

@@ -24,10 +23,40 @@ last_modified_at: 2025-09-12
2423

2524
그럼 SW개발보안은 뭘까?
2625

26+
### SW 개발보안
2727
📚**<span style="color: #008000">SW 개발보안</span>**: 안전한 SW 개발을 위해 소스코드 등에 존재할 수 있는 **잠재적인 보안 약점을 제거**하고, 보안을 고려하여 기능을 설계º구현 하는 등 **SW 개발 과정에서 실행되는 일련의 보안활동**
2828

2929
![alt text](../assets/img/SC/SWdev.png)
3030

31+
1. **분석**
32+
* 시스템 기능 요구사항, 사용자 요구사항
33+
* 자산 식별(개인정보, 기능, 계정 등)
34+
* 보안 목표 설정(기밀성, 무결성, 가용성)
35+
* 법적/정책 요건 반영
36+
***보안 요구사항은 실제 개발 명세로 구체화해야함**
37+
38+
2. **설계**
39+
* 위협 모델링 / 위협원 도출
40+
* 시스템 구조, 데이터 흐름 기반 위협 식별
41+
* 외부 인터페이스 식별
42+
* API, 인증방식, 송수신 데이터, 입력 검증 지점 명확화
43+
* 보안통제 수집
44+
* 인증(MFA), 인가(RBAC), 암호화, 로그, 오류 처리, 임력 검증 설계
45+
***구현 기준이 되는 보안 설계 수집**
46+
47+
3. **구현**
48+
* 표준코딩 가이드 준수
49+
* 입력 검증, 출력 인코딩, 암호화 처리 등
50+
* 소스코드 보안 약점 진단
51+
* 정적 분석 도구 활용 (컴파일 전 분석)
52+
53+
4. **테스트**
54+
* **실행 가능한 코드에 대한 실질적인 보안 점검 수행**
55+
* 보안 취약점 진단(동적 분석)
56+
* 스캐닝, 모의해킹, 퍼징 등
57+
58+
---
59+
3160
### SW개발보안 적용 시 비용 효과
3261
![alt text](../assets/img/SC/SWdevcost.png)
3362

@@ -37,8 +66,9 @@ last_modified_at: 2025-09-12
3766
3. 개발 비용 절감 (초기 단계에서 보안 문제 해결 시 비용 절감 효과)
3867
4. 신뢰할 수 있는 소프트웨어 제공으로 기업 이미지 및 서비스 경쟁력 강화
3968

40-
## MS-SDL
4169
---
70+
71+
## MS-SDL
4272
📚**<span style="color: #008000">MS-SDL(Microsoft Security Development Lifecycle)</span>**: Microsoft에서 개발한 소프트웨어 보안 개발 방법론
4373
* 소프트웨어 개발 생명주기(SDLC) 전반에 걸쳐 보안을 내재화하는 것을 목표로 함
4474
* 보안 취약점 최소화, 보안 사고 예방

_posts/2025-09-24-SC(4-3).md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ last_modified_at: 2025-09-24
2525
* 응답변환(JSON,XML 등 특정형식으로 변경)
2626
* 보안강화(SQL Injection, XSS 등의 공격 방어)
2727

28-
![alt text](../assets/img/CyberSecurity/springfilter.png)
28+
![alt text](../assets/img/SC/springfilter.png)
2929
> Spring Boot Filter 구조
3030
3131
---
@@ -154,7 +154,7 @@ public class DefaultSecurityConfig {
154154
* SpringBoot의 ServletFilter와 HttpServletRequestWrapper를 이용하여 모든 요청의 입력값을 가로챔
155155
* 입력값의 내용을 정규식으로 패턴을 확인하여 필터링 처리
156156

157-
![alt text](../assets/img/CyberSecurity/defendXSS.png)
157+
![alt text](../assets/img/SC/defendXSS.png)
158158

159159
#### XSS 필터 구현
160160
1. **XSSFilter 만들기**

_posts/2025-10-08-SC(6-1).md

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
---
2+
title: "[Security] Secure Coding(6-1) - ORM"
3+
4+
categories: [Security, Secure Coding]
5+
tags:
6+
- [Security, Cyberattacks, 보안, 시큐어 코딩, ORM, MyBatis]
7+
toc: true
8+
toc_sticky: true
9+
10+
date: 2025-10-08
11+
last_modified_at: 2025-10-08
12+
---
13+
>🔒 시큐어 코딩 수업 정리
14+
15+
## ORM 프레임워크
16+
📚**<span style="color: #008000">ORM</span>**: 객체 지향 언어의 객체와 관계형 데이터베이스의 테이블 간 데이터를 자동으로 매핑하는 기술
17+
18+
**ORM 필요성**:
19+
* **불일치 문제 해결**: 객체 모델과 스키마 간 불이치 해소
20+
* **개발 생산성 향상**: SQL 직접 작성 부담 감소, 코드 간결화
21+
* **유지보수성 및 보안 강화**: 데이터베이스 접근 추상화로 보안 취약점(예: SQL Injection) 최소화
22+
23+
![alt text](../assets/img/CyberSecurity/ORM.png)
24+
25+
### 전통적 SQL 쿼리 VS ORM 비교
26+
27+
![alt text](../assets/img/CyberSecurity/ORMvssql.png)
28+
> 각각 정의와 특징 비교
29+
30+
![alt text](../assets/img/CyberSecurity/ORMvssql1.png)
31+
> 장점과 단점 비교
32+
33+
* **전통적 SQL 쿼리 방식이 적합한 경우**
34+
* 성능 튜닝이 중요한 경우
35+
* 복잡한 다중 조인 쿼리 작성 시
36+
* 특정 DBMS 고유 기능(예: 저장 프로시저, 윈도우 함수)을 적극 활용할 때
37+
38+
* **ORM 사용이 적합한 경우**
39+
* CRUD 중심의 애플리케이션, 빠른 프로토타이핑 및 유지보수가 중요한 경우
40+
* 데이터베이스 독립성이 필요하거나 객체 지향 패러다임을 선호할 때
41+
42+
---
43+
44+
### ORM 주요 기능
45+
1. **<span style="color: #008000">매핑 기능</span>**
46+
* **객체-테이블 매핑**
47+
* 클래스와 테이블, 필드와 컬럼을 자동 매핑 → SQL 작성 없이 데이터 조작
48+
* **관계 매핑**
49+
* `1:1`, `1:N`, `N:M` 관계를 어노테이션 또는 XML 설정을 통해 정의 및 관리
50+
* **자동 스키마 생성**
51+
* 도메인 모델 변경에 따라 DB 스키마를 자동 생성하거나 업데이트 가능
52+
53+
2. **<span style="color: #008000">CRUD 작업 지원</span>**
54+
* `Create`, `Read`, `Update`, `Delete` 기능을 **객체 조작**만으로 처리
55+
* 데이터베이스 직접 접근 없이, **객체 상태 변경에 따른 자동 동기화**(`DIRTY CHECKING`)
56+
57+
3. **<span style="color: #008000">고급 쿼리 기능</span>**
58+
* **객체 지향 쿼리 언어 (HQL, JPQL 등)**
59+
* SQL보다 **추상화된 방식**으로 데이터 조회 및 조작 가능
60+
* **Criteria API**
61+
* 프로그래밍 방식으로 동적 쿼리 작성 지원
62+
* **네이티브 쿼리 지원**
63+
* 필요시 직접 SQL을 실행할 수 있는 기능 제공
64+
65+
4. **<span style="color: #008000">Lazy Loading & 캐싱</span>**
66+
* **지연 로딩(Lazy Loading)**
67+
* 실제 사용 시점에 연관 데이터를 로드하여 초기 로딩 비용 절감
68+
* **1차/2차 캐시**
69+
* 동일 세션(1차 캐시) 내, 애플리케이션 전역(2차 캐시)에서 캐시를 활용해 성능 최적화
70+
71+
5. **<span style="color: #008000">트랜잭션 관리</span>**
72+
* **자동 트랜잭션 처리**
73+
* 명시적 트랜잭션 없이, ORM 프레임워크가 트랜잭션 경계를 관리
74+
* 일일히 커밋과 롤백 코드를 작성 안해도 됨
75+
* **동시성 제어 및 낙관적/비관적 Lock 지원**
76+
* 데이터 무결성을 유지하며 여러 사용자의 동시 접근 처리
77+
* **낙관적 Lock**: 데이터를 읽을 때 버전을 읽고 수정할 때 버전 번호 확인 → 버전이 다르면 다른 사람이 먼저 수정함, 즉 충돌!
78+
* **비관적 Lock**: 데이터를 읽을 때 DB에서 Lock을 걸고 수정, 작업 완료 후 Lock 해제
79+
80+
6. **기타 부가 기능**
81+
* **연관 관계 및 Fetch 전략**
82+
* 연관 객체 로딩 전략 설정으로 성능 및 메모리 최적화
83+
* **유연한 설정 및 확장성**
84+
* XML, 어노테이션, 플러그인 등을 통한 다양한 설정 옵션과 확장성 제공
85+
86+
---
87+
88+
## MyBatis 프레임워크 활용
89+
📚**<span style="color: #008000">MyBatis</span>**: Java Persistence 프레임워크로, **SQL 쿼리와 자바 객체 간의 매핑**을 지원
90+
* 개발자가 직접 SQL을 작성한 후, **XML이나 어노테이션을 통해 매핑을 설정**하여 DB와 상호작용
91+
92+
**특징**:
93+
* 복잡한 쿼리와 최적화에 유리
94+
* ORM의 추상화 없이 직접 SQL 작성으로만 세밀한 제어 가능
95+
* XML, 어노테이션 등 다양한 방식으로 매핑 설정 가능
96+
97+
### MyBatis 주요 기능
98+
1. **<span style="color: #008000">SQL 매핑 및 실행</span>**
99+
* Mapper 파일(`XML`) 또는 어노테이션 기반으로 SQL 문을 정의
100+
* SQL 문과 자바 객체 간의 **자동 매핑 제공**
101+
102+
2. **<span style="color: #008000">동적 SQL 지원</span>**
103+
* **조건문(<if>, <choose>) 및 반복문(<foreach>)**을 사용하여 유연한 쿼리 작성 가능
104+
105+
![alt text](../assets/img/CyberSecurity/Mybatisactive.png)
106+
107+
3. **<span style="color: #008000">타입 핸들러(Type Handler)</span>**
108+
* **자바 객체와 DB 데이터 간 변환**을 위한 사용자 정의 타입 핸들러 지원
109+
110+
4. **<span style="color: #008000">플러그인 기능</span>**
111+
* 인터셉터를 통해 쿼리 실행 전/후 로직을 확장하거나 커스터마이징 가능
112+
113+
---
114+
115+
### Mybatis 설정 및 구성
116+
117+
1. **<span style="color: #008000">설정 파일(mybatis-config.xml)</span>**
118+
* 환경(데이터소스, 트랜잭션 매니저 등) 설정 및 전역 옵션 구성
119+
120+
![alt text](../assets/img/CyberSecurity/Mybatissetting.png)
121+
122+
2. **<span style="color: #008000">Mapper 파일 구성</span>**
123+
* SQL 문과 매핑 정보를 담은 XML 파일 또는 어노테이션 사용
124+
* 네임스페이스를 통해 Mapper를 구분하고 재사용성 향상
125+
126+
![alt text](../assets/img/CyberSecurity/Mybatismapping.png)
127+
128+
3. **<span style="color: #008000">데이터 소스 및 세션 관리</span>**
129+
* **DB 커넥션 풀**`SqlSessionFactory`를 이용해 세션 생성 및 관리
130+
* 스프링과 연동 시, **스프링 부트 자동 설정 및 통합 활용**
131+
132+
---
133+
134+
### Mybatis 장단점 및 사례
135+
**장점:**
136+
* SQL을 직접 작성하므로, 복잡한 쿼리 및 성능 튜닝에 유리
137+
* ORM보다 간단한 설정으로 데이터 매핑을 관리
138+
* DB 작업의 전 과정을 개발자가 직접 관리 가능
139+
140+
**단점:**
141+
* 직접 SQL 작성 시, 비슷한 쿼리의 중복 관리 필요
142+
* ORM처럼 완전한 객체 관계 자동 매핑은 제공하지 않음
143+
* XML/어노테이션 매핑 파일 관리 및 동적 SQL 작성에 대한 학습 필요
144+
145+
💡**사용 사례**:
146+
* 대규모 데이터 처리, 복잡한 쿼리 최적화가 요구되는 애플리케이션
147+
* 기존 JDBC의 반복 작업을 줄이면서도 세밀한 SQL 제어가 필요한 프로젝트
148+
149+
---
150+
151+
## ORM 사용 시 보안 이슈
152+
* ORM의 역할
153+
* 객체와 관계형 데이터베이스 간 매핑을 자동화하여 개발 생산성을 높임
154+
* SQL을 직접 작성하지 않고도 CRUD 및 복잡한 쿼리 수행 가능
155+
156+
* **보안 이슈의 중요성**
157+
* ORM 자체가 `SQL Injection` 등을 기본적으로 방어하지만, 잘못된 사용 시 취약점이 발생할 수 있음
158+
* 매핑, 캐싱, 동적 쿼리 등 여러 요소가 보안에 영향을 미칠 수 있음
159+
160+
### SQL Injection + 동적 쿼리 취약점
161+
162+
{:.prompt-warning}
163+
> 기본적인 ORM은 파라미터 바인딩으로 보호되지만, **동적 쿼리를 문자열 결합 방식으로 작성**하면 SQL 인젝션 발생할 수 있음
164+
>
165+
166+
**→ Native Query 사용 시 주의 필요!**
167+
168+
**대응 방안**:
169+
* 항상 안전한 파라미터 바인딩 방식을 사용해야 함
170+
* 동적 쿼리 작성 시 - ORM이 제공하는 동적 SQL 태그(예: MyBatis의 `if`, `choose` 등) 사용
171+
* Native Query 사용 시 별도 검증 및 파라미터 바인딩 철저
172+
173+
---
174+
175+
### 캐싱 및 지연 로딩 관련 보안 이슈
176+
* **캐싱 취약점**
177+
* 2차 캐시나 공유 캐시 설정 시 민감 데이터가 의도치 않게 **노출될 가능성**
178+
* 캐시 무결성 관리 미흡 시, 캐시 변조 공격(`Cache Poisoning`) 위험
179+
180+
* **지연 로딩 및 데이터 노출**
181+
* 필요 이상으로 연관된 데이터가 지연 로딩되어, 예상치 못한 데이터 노출 발생 가능
182+
* ORM 매핑 시 **민감 정보가 포함된 엔티티를 불필요하게 로드**하는 문제
183+
184+
**대응 방안**:
185+
* 캐시 설정 시 민감 데이터 제외 및 접근 제어 강화
186+
* `Lazy Loading` 설정과 연관 데이터 조회 시 **필요한 데이터만 선택적으로 로드**하도록 설계
187+
188+
---
189+
190+
### 매핑, 설정 및 권한 관리 취약점
191+
* **잘못된 매핑 설정**
192+
* 엔티티 매핑 오류로 인한 데이터 누락 또는 과도한 데이터 노출
193+
* 양방향 매핑 및 연관 관계 설정 미흡 시, 무한 루프 또는 불필요한 데이터 로드 발생
194+
195+
* **Mass Assignment (대량 할당) 취약점**
196+
* 클라이언트 입력 값을 그대로 엔티티에 바인딩할 경우, 원치 않는 필드 변경 가능
197+
198+
**대응 방안**:
199+
* 엔티티 매핑 시 - 민감 필드는 **명시적으로 제외하거나 읽기 전용**으로 설정
200+
* 입력값 검증과 DTO(Data Transfer Object)를 활용하여, 대량 할당 공격 방지
109 KB
Loading
181 KB
Loading
174 KB
Loading

assets/img/CyberSecurity/ORM.png

67.6 KB
Loading
115 KB
Loading
152 KB
Loading

0 commit comments

Comments
 (0)