**OT(운영 기술)와 IT(정보 기술) 네트워크 분리를 통한 네트워크 보안**
---
### **1. OT와 IT의 개념**
**OT(Operational Technology, 운영 기술)**
- **정의**: 물리적 장비나 프로세스를 감시하고 제어하는 하드웨어와 소프트웨어 시스템.
- **예시**: 산업 제어 시스템(ICS), SCADA 시스템, 공장 자동화 장비 등.
- **특징**:
- 실시간성 및 안정성이 중요.
- 일반적으로 폐쇄형 네트워크로 구성.
- 업데이트 및 패치 주기가 길고, 보안 취약점이 존재할 수 있음.
**IT(Information Technology, 정보 기술)**
- **정의**: 데이터를 생성, 처리, 저장 및 전달하는 데 사용되는 기술.
- **예시**: 사무용 컴퓨터, 서버, 네트워크 장비, 데이터베이스 등.
- **특징**:
- 기밀성, 무결성, 가용성이 중요.
- 인터넷과의 연결이 일반적.
- 정기적인 업데이트 및 보안 패치 적용.
---
### **2. OT와 IT 네트워크 분리의 필요성**
1. **보안 위협 증가**
- 사이버 공격이 점점 정교해지면서 OT 시스템도 공격 대상이 되고 있습니다.
- OT 시스템이 IT 네트워크와 연결되어 있으면 공격자가 IT 네트워크를 통해 OT 시스템에 접근할 수 있습니다.
2. **시스템 안정성 보장**
- OT 시스템은 실시간 운영과 안정성이 중요하기 때문에 외부 위협으로부터 보호되어야 합니다.
- 네트워크 분리를 통해 OT 시스템의 안정적인 운영을 유지할 수 있습니다.
3. **규제 및 표준 준수**
- 산업별 보안 규제나 국제 표준에서 OT와 IT 네트워크의 분리를 요구하는 경우가 있습니다.
- 예: NERC CIP, IEC 62443 등.
---
### **3. 네트워크 분리 방법**
**1. 물리적 분리(Physical Separation)**
- **설명**: OT와 IT 네트워크를 완전히 별도의 물리적 인프라로 구축.
- **장점**:
- 네트워크 간 직접적인 연결이 없어 보안성이 높음.
- OT 시스템의 안정성을 최대한으로 보장.
- **단점**:
- 구축 및 유지보수 비용이 높음.
- 데이터 교환이 필요한 경우 불편함.
**2. 논리적 분리(Logical Separation)**
- **설명**: VLAN, 서브넷팅, 방화벽 등의 기술을 이용하여 네트워크를 논리적으로 분리.
- **장점**:
- 기존 인프라를 활용할 수 있어 비용 효율적.
- 데이터 교환이 필요할 때 유연하게 대응 가능.
- **단점**:
- 설정 오류나 취약점을 통해 네트워크 침입 가능성 존재.
- 물리적 분리만큼의 보안성은 보장되지 않음.
---
### **4. 네트워크 분리 구현 시 고려사항**
**1. 방화벽 및 보안 장비 구성**
- **방화벽 설치**: OT와 IT 네트워크 사이에 방화벽을 설치하여 트래픽을 제어.
- **접근 제어 목록(ACL)**: 허용된 IP와 포트만 접근 가능하도록 설정.
**2. 침입 탐지 및 방지 시스템(IDS/IPS) 도입**
- **IDS**: 네트워크 트래픽을 모니터링하여 이상 징후를 탐지.
- **IPS**: 탐지된 위협을 자동으로 차단.
**3. 데이터 다이오드(Data Diode) 사용**
- **설명**: 물리적으로 한 방향으로만 데이터가 흐를 수 있도록 하는 장비.
- **장점**: OT 네트워크로의 역방향 접근을 완전히 차단.
**4. 안전한 데이터 교환 방법 마련**
- **DMZ(Demilitarized Zone) 구축**: OT와 IT 네트워크 사이에 중간 영역을 만들어 안전한 데이터 교환.
- **파일 전송 시 보안 프로토콜 사용**: SFTP, FTPS 등 암호화된 프로토콜 사용.
**5. 접근 권한 관리**
- **최소 권한 원칙 적용**: 필요한 최소한의 권한만 부여.
- **강력한 인증 방식 도입**: 이중 인증(MFA) 등 보안 강화.
**6. 시스템 및 소프트웨어 업데이트**
- **정기적인 패치 관리**: 보안 취약점을 최소화.
- **업데이트 시 영향 분석**: OT 시스템의 특성상 업데이트가 시스템에 미치는 영향을 사전에 검토.
**7. 직원 교육 및 인식 제고**
- **보안 교육 실시**: 사회공학적 공격에 대비.
- **보안 정책 준수 강조**: 정책 위반 시 발생할 수 있는 위험 인식.
---
### **5. OT/IT 네트워크 분리의 이점**
1. **보안 강화**
- 외부로부터의 침입 경로를 최소화하여 사이버 공격에 대한 노출 감소.
2. **운영 안정성 향상**
- IT 네트워크의 변화나 문제로부터 OT 시스템을 보호하여 생산성 유지.
3. **규제 준수 용이**
- 산업 표준 및 규제 요구 사항을 충족하여 법적 리스크 감소.
---
### **6. 통합 관리의 필요성**
- **통합 보안 관제**
- 분리된 네트워크의 보안 이벤트를 중앙에서 관리하고 모니터링.
- SIEM(Security Information and Event Management) 시스템 도입.
- **정책 일관성 유지**
- OT와 IT 모두에 적용되는 보안 정책을 수립하여 관리의 효율성 증대.
---
### **7. 최신 동향**
- **IoT 및 IIoT의 확산**
- 산업용 사물인터넷 기기의 증가로 OT 네트워크의 보안 위협이 증가.
- 추가적인 보안 계층과 네트워크 세분화 필요.
- **제로 트러스트 보안 모델 도입**
- 내부 네트워크라도 신뢰하지 않고 모든 접근을 검증하는 모델.
- OT 환경에서도 적용을 검토.
---
### **8. 결론 및 권장 사항**
- **전문가와의 협업**
- 네트워크 분리 및 보안 구축 시 보안 전문가와 협력하여 최적의 솔루션 도출.
- **지속적인 보안 평가**
- 정기적인 보안 점검과 모의 해킹을 통해 취약점 발견 및 개선.
- **비상 대응 계획 수립**
- 사이버 공격이나 보안 사고 발생 시 대응 절차와 복구 계획 마련.
---
**추가 질문이나 특정 부분에 대한 상세한 설명이 필요하시면 언제든지 알려주세요!**
PROMISC(무차별) 모드를 활용한 네트워크 모니터링은 좋은 접근법입니다. 하지만 선박 네트워크의 특수성을 고려해야 할 부분들이 있습니다:
1. 선박 네트워크 특징
```
[일반 네트워크와 유사한 부분]
- TCP/IP 기반 통신
- 이더넷 스위치/라우터 사용
- LAN 구성
[선박만의 특수성]
- OT(운영기술) 네트워크 존재
- 위성통신 구간
- 항해/기관 시스템 연결
```
2. PROMISC 모드 활용 방안
- **모니터링 포인트 설정**
* VSAT 라우터 연결 지점
* OT-IT 네트워크 경계
* 주요 서버 연결 구간
- **탐지 가능한 공격**
* ARP 스푸핑
* MAC 위조
* 패킷 스니핑 시도
* 비정상 트래픽
3. 고려해야 할 사항
- **대역폭 제약**
* 위성통신 구간의 제한된 대역폭
* 모니터링 트래픽 양 조절 필요
- **분리된 네트워크**
* 항해장비 네트워크
* 기관 제어 네트워크
* 승무원 인터넷 네트워크
4. 구현 방안
```
[모니터링 시스템 구성]
SPAN/미러링 포트 -> 패킷 수집 -> 분석 엔진 -> 알림 시스템
[주요 기능]
- 실시간 트래픽 모니터링
- 이상 패턴 탐지
- 로그 기록
- 알림 발생
```
5. 보안 강화 포인트
- **네트워크 세그먼테이션**
* OT/IT 네트워크 분리
* VLAN 구성
* 접근 제어 강화
- **모니터링 정책**
* 중요 시스템 트래픽 우선 감시
* 보안 이벤트 정의
* 대응 절차 수립
이러한 접근은 기존 네트워크 보안 기술을 선박환경에 맞게 최적화하는 좋은 사례가 될 수 있습니다.
#### 1. `constexpr` 함수
`constexpr` 함수는 본문 바디에 있는 모든 문장이 컴파일 시간에 평가될 수 있어야 합니다. 이는 함수의 모든 파라미터가 상수 표현식이어야 한다는 것을 의미하지는 않지만, 호출 시점에 주어진 인자가 상수 표현식인 경우 컴파일 시간에 평가됩니다.
예를 들어:
```cpp
constexpr int factorial(int n) {
return (n <= 1) ? 1 : (n * factorial(n - 1));
}
int main() {
constexpr int val = factorial(5); // 컴파일 시간에 계산됨
int runtime_val = factorial(5); // 런타임에 계산됨
return 0;
}
```
위의 코드에서 `factorial(5)`는 `constexpr`로 컴파일 시간에 계산되어 `val` 변수에 할당됩니다. 그러나 `runtime_val` 변수는 런타임에 계산됩니다.
#### 2. `constexpr` 멤버 함수
클래스의 멤버 함수도 `constexpr`로 정의할 수 있습니다. 이는 객체의 멤버 변수를 컴파일 시간에 초기화하거나, 객체를 `constexpr`로 생성하는 데 유용합니다.
```cpp
class MyClass {
public:
constexpr MyClass(int val) : value(val) {}
constexpr int getValue() const { return value; }
private:
int value;
};
int main() {
constexpr MyClass obj(5);
static_assert(obj.getValue() == 5, "Value mismatch!"); // 컴파일 시간에 확인됨
return 0;
}
```
위 코드에서 `MyClass`는 `constexpr` 생성자를 가지고 있으며, `getValue` 메소드는 `constexpr`로 정의되어 컴파일 시간에 호출될 수 있습니다.
#### 3. `constexpr` 변수
`constexpr` 변수는 명시적으로 컴파일 시간에 상수로 취급됩니다.
```cpp
constexpr int a = 10;
constexpr int b = a + 20;
```
위의 예제에서 `a`와 `b`는 모두 컴파일 시간에 계산되어 상수로 정의됩니다.
### `constexpr`과 `const`의 차이점
- **`const`**:
`const` 키워드는 변수의 값을 변경할 수 없음을 의미합니다. 그러나 `const` 변수는 컴파일 시간에 반드시 초기화될 필요가 없습니다.
```cpp
const int x = someFunction(); // someFunction()은 런타임에 호출됨
```
- **`constexpr`**:
`constexpr` 키워드는 컴파일 시간에 평가되고 상수로 간주되는 값을 의미합니다. 컴파일러가 가능한 코드를 최적화할 수 있도록 도와줍니다.
```cpp
constexpr int y = 10;
```
### `constexpr`을 사용할 때 고려해야 할 점
1. **제약**:
`constexpr` 함수는 반복문, 조건문 등을 사용할 수 있지만, 모든 식은 컴파일 시간에 평가될 수 있어야 합니다. 즉, 실행에 종속적인 코드나 동적 메모리 할당은 허용되지 않습니다.
2. **C++ 표준의 발전**:
C++14부터는 `constexpr` 함수가 더 많은 기능을 제공하며, C++17에서는 가변 길이의 반환 타입을 지원하도록 확장되었습니다.
### 요약
`constexpr`은 컴파일 시간 상수 표현식을 정의하는 강력한 도구로, 성능 최적화, 메모리 효율성, 타입 안정성을 제공합니다. 이를 통해 코드가 더욱 효율적이고 예측 가능하게 됩니다. 컴파일러가 상수 값을 미리 계산할 수 있기 때문에, 실행 시간 성능이 크게 향상될 수 있습니다. 여러 용도로 활용할 수 있는 `constexpr`의 다양한 활용법을 익히고 적절하게 적용하면, 코드를 더욱 최적화하고 안정성 있게 작성할 수 있습니다.
iOS 쪽...
Snapkit Error type - 1
interfacebuilder의 constraints는 무시하고 했는데 이제 같이 고려해야 한다.
캘린더, 메세지 뷰 등 오픈소스 땡겨서 넣고 나니 충돌 에러가 많네.
에러가 다음과 같은 양상을 띤다면, IB constratins와 snapkit 의 제약 사항을 함께 따져봐야 한다.
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2018-12-12 09:18:49.725504+0900 Bridge2[12529:869661] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<SnapKit.LayoutConstraint:0x282946400@TendencyCalendarPopUP.swift#140 UIButton:0x1036cba20.top == UILabel:0x1036cb730.bottom + 3.0>",
"<SnapKit.LayoutConstraint:0x282947180@TendencyCalendarPopUP.swift#166 UILabel:0x1036ccf40.top == UILabel:0x1036cb730.bottom + 10.0>",
"<SnapKit.LayoutConstraint:0x282947240@TendencyCalendarPopUP.swift#168 UILabel:0x1036ccf40.top == UIButton:0x1036cba20.bottom + 10.0>"
)
Will attempt to recover by breaking constraint
<SnapKit.LayoutConstraint:0x282947240@TendencyCalendarPopUP.swift#168 UILabel:0x1036ccf40.top == UIButton:0x1036cba20.bottom + 10.0>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
AI 통합 엔지니어 (AI Integration Engineer): 이미 만들어진 AI 모델을 가져와 시스템에 통합하고, AI 파이프라인을 구성하는 역할을 강조한 직함입니다.
ML 파이프라인 엔지니어 (ML Pipeline Engineer): 기계 학습 모델의 워크플로우 설계, 데이터 전처리, 모델 배포 등을 포함한 ML 파이프라인 구축과 관련된 직무를 나타내는 명칭입니다.
AI 운영 엔지니어 (AI Operations Engineer): AI 모델의 운영, 배포, 모니터링을 담당함으로써 AI 모델을 프로덕션 환경에 원활하게 적용하는 역할을 강조하는 직함입니다.
데이터 인프라 엔지니어 (Data Infrastructure Engineer): 데이터 및 AI 인프라를 설계하고 유지 관리하며, AI 모델이 실제 비즈니스에 적용될 수 있도록 하는 작업을 중점적으로 수행합니다.
AI 시스템 엔지니어 (AI Systems Engineer): AI 시스템의 전체적인 설계 및 구현, 모델 통합 및 배포를 담당하는 역할을 강조하는 명칭입니다.
AI 배포 엔지니어 (AI Deployment Engineer): AI 모델의 배포와 관련된 프로세스 전반을 담당하는 역할을 강조한 직함입니다.
AI 오케스트레이션 엔지니어 (AI Orchestration Engineer): AI 파이프라인과 워크플로우의 자동화 및 최적화를 담당하는 역할을 나타내는 명칭입니다.
최근댓글