분류 전체보기

SSH Connection Layer에 사용자 패스워드 만료 검증 로직 추가
요구사항다음과 같이 ssh 접속시 패스워드 변경 기능을 추가한다. 개발 내역1. SSH key 교환 및 인증 동작 원리 분석2. dropbear 기반 ssh 서버 구성 분석3. 비밀번호 수정 로직과 연동 SSH PacketSSH의 packet은 다음과 같이 구성되어 있다.Packet LengthPadding LengthPayloadRandom PaddingMessageAuthentication Code(MAC) // ssh packet 형식uint32 packet_length // payload + padding 길이 (4바이트)byte padding_length // padding 길이 (1바이트)byte[n1] payload // 메시지 데이터 (메시지 타입 + 메시지 본문)byte[n2]..
vrrp 장비 failover 시 sync 패킷 전송 중 panic 발생 오류
vrrp 구성 (Active-Standby or Active-Active) 시 UTM 장비 failover 시 sync 패킷 전송 중 panic 발생하는 문제가 있어 linux 커널 내부의 conntrack 를 통한 ha clustering 이 어떻게 동작하는지 분석해보았다. 장애 대응 개요1. UTM 장비 Active-Active 구성 후 네트워크 트래픽 폭주2. 장비 failover 후 sync 패킷 전송 중 커널 패닉 발생 재현 절차 조사 내역1. conntrack 을 사용한 ha 구성 로직 분석2. failover 시 sync 패킷 전송 로직 분석 conntrack 을 사용한 ha 구성 로직 분석

conntrack 세션을 이용한 iptables 최적화 및 관련 버그
iptables 정책 적용 후에도 기존 세션이 남아 hit count를 업데이트 하고 있는 이슈를 맡게된 계기로상태를 가진 세션 기반 방화벽처리에 대해 조사해보았다. 장애 대응 개요1. iptables rule sequence 수정 후에도 수정 전 정책으로 패킷 카운팅 되고 있음을 확인2. 해당 호스트는 PC ↔ eth0 (UTM) ↔ eth1 (UTM) ↔ 인터넷 의 구조로 PC 에 대한 라우터 역할을 수행하고 있었음3. reply 패킷의 경우 원래 PREROUTING hook을 안타지만 인터넷 → PC 에 대한 reply 패킷은 PREROUTING → FORWARD → POSTROUTING hook을 타고 처리됨4. rule 적용은 PREROUTING hook의 mangle table에서 orig ..
[OS] I/O처리 방식: Non-Blocking
논 블로킹 모드로 프로그래밍을 한다는 것은 먼저 블로킹의 의미 부터 명확히 해야한다. 일반적으로 블로킹은 "운영체제(커널)에게 어떤 요청을 하고 결과를 운영체제가 알려줄 때까지 기다린다" 를 의미한다. 예를 들어 데이터베이스 서버에 요청하고 그 결과를 데이터베이스 서버가 알려줄 때까지 기다린다도 같은 얘기이다.블로킹: 프로그램이 운영체제(커널) 또는 외부 서비스(DB, 네트워크 등) 에 요청을 보내고, 해당 요청의 결과가 반환될 때까지 대기(멈춤) 하는 상태. connect() 를 호출하면 보통은 운영체제가 원격 서버와 연결하고 그 결과를 알려준다. 연결하는데 지연가능한 시간은 1초 이내, 수초 또는 수분이 될 수 있다. 하나의 연결을 위해 이를 수행하는 프로세스는 장시간을 대기(블로킹)할 수 있으며 그..
[Crypto] NEAT, NES
NEAT (National Encryption AlgoriThm) 알고리즘 분석 요약NEAT은 대한민국 국정원이 설계한 비공개 국가 표준 암호 알고리즘으로, 1997년에 국가기관용 표준 암호로 제정되었다. 이 알고리즘은 정부 기관에서 내부 데이터와 문서 암호화를 위해 사용되며, security through obscurity(암호화 원리를 숨김으로써 보안을 유지하는 방식)를 부분적으로 의존하고 있다. 128비트 블록 암호화 알고리즘으로, IDEA(International Data Encryption Algorithm)와 구조적으로 유사하다. 특징암호 구조Feistel 네트워크 기반: 암호화와 복호화 과정이 거의 동일12.5 라운드: 12번의 full-round 연산과 1번의 half-round 연산으로 ..
Base64
Base64, Base32, Base16은 바이너리 데이터를 텍스트 데이터로 인코딩하는 표준 방식으로, 바이너리 데이터를 안전하게 전송하거나 저장하기 위해 사용된다. 이는 주로 이메일, URL, 또는 파일 저장 시 인코딩에 사용된다. Base64 는 64종류의 문자를 이용하기 때문에 인코딩 후에는 1문자당 6bit(64=2^6) 의 정보를 가진다.Base64: 64개의 문자 (A–Z, a–z, 0–9, +, /) → 6bitBase32: 32개의 문자 (A–Z, 2–7) → 5bit숫자 2–7을 사용하는 이유는 혼동을 피하기 위해 (0과 O, 1과 I 구분)Base16: 16개의 문자 (0–9, A–F) → 4bit특성Base64Base32Base16사용 문자 수64 (A–Z, a–z, 0–9, +, /..

Google authenticator를 사용한 2FA 인증 #1 이론
system에 로그인 하기 위한 사용자 이름 과 비밀 번호가 있어야한다. 여기에 보안계층을 추가하기 위해 one time password generator 를 사용할 수 있다. Google Authenticator 에서 사용하는 암호기법을 살펴보면 TOTP, HOTP 두가지를 사용한다. HOTP(Hmac based One Time Password)HMAC 기반 일회용 비밀번호(또는 HOTP) 는 Shared Secret 와 Event Counter를 사용하는 이벤트 기반 OTP 알고리즘 이다. HOTP의 핵심은 비밀 키이다. seed라고도 하는 비밀키는 counter 값과 달리 고정된 값이고, 토큰을 초기화하는 동안 otp 토큰과 서버가 한번만 교환하는 값이다. 그런 다음 비밀키는 클라이언트와 서버에 안..
![[C/interrupt] IRQs: Hardware, Software](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpqO4a%2FbtsKNWdZV0m%2FKXcVoK5Y1La4b9OBQLHvxk%2Fimg.png)
[C/interrupt] IRQs: Hardware, Software
장치들은 처리할 작업이 준비되었음을 컴퓨터 시스템의 다른 부분에 알리기 위해 여러가지 방법을 사용한다.하드웨어와 소프트웨어 간의 비동기 통신을 효율적으로 처리하기 위해 IRQ가 필요하다. IRQ는 하드웨어 장치에서 이벤트가 발생했을 때 CPU가 이를 처리하도록 알려주는 역할을 한다. IRQ 정보를 확인하기 위해 다음 명령어를 사용할 수 있다.$ cat /proc/interrupts또는$ mpstat -A handle_IPI는 ARM 아키텍처에서 다중 프로세서 간 인터럽트(IPI)를 처리하는 함수이다.void handle_IPI(int ipinr, struct pt_regs *regs){ switch (ipinr) { case IPI_TIMER: tick_receive..

NAPI
대부분의 device(nic..) 들은 두가지 방법으로 커널과 통신한다.polling커널 측에서 수행커널이 장치의 레지스터를 읽어 주기적으로 패킷의 수신 여부를 확인장치가 새로운 패킷을 가지고 있을 경우 이를 처리CPU 리소스 절약이 가능하지만, 불필요한 리소스 소모 가능interruptdevice 측에서 수행장치가 새로운 패킷을 받을 경우 하드웨어 IRQ를 사용하여 커널에게 알려 주는 방식커널이 IRQ를 받게 되면, 해당 IRQ를 처리 하기 위해서 미리 등록된 디바이스 드라이버의 인터럽트의 수신 패킷 처리 루틴(Interrupt Handler)을 호출인터럽트 핸들러(top half handler)는 수신한 패킷을 복사하고 큐에 넣은 후softirq를 사용하여 커널이 해당 패킷을 처리 할 수 있도록 한다..