SECOPS란?
정의
- DevOps가 소프트웨어 개발자 및 운영 전문가를 통합 하는 방식
- SecOps는 보안 및 운영 팀을 연결하는 관리 방식
목표
- 개발 초기 단계 또는 모든 단계에서 보안 프로세스를 도입 접목 시키는것
- 지속적인 보안 컴플라이언스 자동화
- 보안에 대한 책임을 공유하여 비즈니스, 제품 및 서비스의 보안 상태를 향상 시키는 것
효과
- ROI 향상
- 생산성 향상
- 리소스 감소
- 보안 문제 감소
- 감사 절차 개선
SECOPS의 대표 활용사례
대표적인 사례로 IBM Cloud 보안 운영 사례를 들여다보면 오픈소스 saltstack 자동화 도구를 이용하여 SECOPS를 구현하였습니다. 단, 12명의 엔지니어로 전세계 80개 IDC에 약 70,000대 이상의 서버에 보안 컴플라이언스를 수행하고 있습니다.
자동화와 오케스트레이션 기능으로 운영중인 인프라 시스템에 보안 정책을 자동으로 배포하고 새로운 보안위협에 지속 대응하고 있습니다. 그리고 IT 시스템의 취약성에 대해 자동 조치하고 자동화된 보안 감사를 지속 수행하고 있습니다.
예를들면, 단일 명령 하나로 수천~ 수만대 IT 시스템의 보안 취약성을 자동으로 수정할수 있습니다.
SaltStack을 활용한 취약한 시스템 식별 및 보안 패치 과정 대표 사례를 보겠습니다. 수천대의 시스템에 수초 만에 보안 패치가 적용됩니다.
Heartbleed 보안 취약점 패치 적용 사례
- 취약 버전 Open SSL사용 시스템에 원격에서 진행 되는 해킹 공격 형태
- 전체 시스템에 단일 명령으로 Open SSL취약 버전 사용중인 전체 자산 파악
- 취약한 시스템 점검후 전체 시스템에 보안 패치 적용
Wannacry 보안 취약점 패치 적용 사례
- Windows OS SMB v1.0 취약점을 이용한 랜섬웨어 공격
- 전체 시스템에 단일 명령으로 윈도우 서버의 SMB v1.0을 사용 않함 으로 레지스트리 수정
sudo salt ‘win*’ reg.set_value HKEY_LOCAL_MACHINE ‘SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters’ ‘SMB1’ ‘0’
- 레지스트리 수정 후 시스템 리부팅 -> SMB 취약점 패치 적용
이와 같이 saltstack과 같은 IT 운영관리 자동화 도구를 활용하여 보안 업무에 접목 시킨다면 수많은 작업의 시간을 대폭 줄일수 있으며 업무 효율성을 증대 시킬수 있고 기존 Legacy 프로세스를 대폭 개선할수 있습니다. saltstack은 현재 vmware에 인수 합병되었습니다.
saltstack외에도 대표적인 IT 인프라 자동화 관리 도구는 ansible, chef, puppet등 다양한 오픈소스가 있으며 각 회사 서비스에 가장 적합한 도구로 선택하여 사용하면 됩니다.
Saltstack Large Scale tuning Point
현재 아래 스펙으로 문제없이 운영중
Single master (24 core / mem 32G) VM (syndic node 추가 예정)
Minions 11,000 VM (윈도우:리눅스 8:2)
적절한 튜닝이 꼭 필요함 (튜닝 안하면 여러가지 문제점이 발생됨 / 특히 windows minion 이 많으면…)
아래 설정값 이외 에도 각 환경설정 파일 및 튜닝 포인트를 참고하여 인프라 scale에 맞게 운영해야 한다.
※ 아래 saltstack 튜닝 포인트는 참고 용도로 사용 바랍니다.
서비스 환경(minions 수, master spec, 네트워크 환경)이 틀릴 경우 다양한 이슈가 발생 할수도 있습니다.
– Minion 수천대 ~ 만대이상 일때 이슈 사항
문제점:
Master 서버 부하 문제 Minion이 수천대~ 이상일때 결과 처리에 대한 응답시간 초과현상 windows minion 일때 응답시간이 느림 에러 로그는 종종 worker_thread를 증가 시키라고 함 네트워크 성능 이슈 이외 다양한 에러 레벨 로그 발생….. |
해결 방안
OS 리소스 증설 필요 : cpu, memroy UP (cpu core수는 worker_threads 설정과 관련이 깊음)
salt master OS 네트워크 설정 튜닝 tunning
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.core.rmem_default=87380
sysctl -w net.core.wmem_default=87380
sysctl -w net.ipv4.tcp_rmem=’4096 87380 16777216′
sysctl -w net.ipv4.tcp_wmem=’4096 87380 16777216′
sysctl -w net.ipv4.tcp_mem=’16777216 16777216 16777216′
sysctl -w net.ipv4.route.flush=1
salt master OS systemd
Ubuntu 16.x 기준
/lib/systemd/system/salt-master.service
[Unit]
Description=The Salt Master Server
After=network.target
[Service]
LimitCORE=infinity
LimitNOFILE=65535
LimitNPROC=65535
Type=notify
NotifyAccess=all
ExecStart=/usr/bin/salt-master
[Install]
WantedBy=multi-user.target
salt master config 환경설정 최적화
key_cache: ‘sched’
timeout: 90
gather_job_timeout: 5
max_open_files: 100000
worker_threads: 500
job_cache: False
그리고 ZeroMQ 관련 값 아래와 같이 적절하게 조정
zmq_backlog: 3000
pub_hwm: 3000
salt_event_pub_hwm: 128000
event_publisher_pub_hwm: 64000
salt Minion이 winodws or 노드수(minion) 수천대~ 이상일때 minion 환경 설정
salt minion config 튜닝
multiprocessing: False
(윈도우는 쓰레드 기반이라는 구글링 / 여튼 이렇게 해야 윈도우 미니언일때
처리가 빠름 / 리눅스 미니언은 제외)
random_reauth_delay: 120
recon_default: 1000
recon_max: 59000
recon_randomize: True
Minion did not return. [No response] 많이 발생하면
(예를들어 master <-> minions 통신 과정에 라우팅을 많이 거쳐가거나, 중간에 방화벽 같은 장비가 있거나
Azure, amazon 인프라에 서버를 운영 중이라면 아래 사항 참고)
keepalive 관련된 환경 설정 적절하게 셋팅
tcp_keepalive: True
tcp_keepalive_idle: 60
기타
ex) minions(VM) 몇 천대에 동시에 ‘HealthService’ 라는 프로세스를 내렸다 올린다면,
스토리지 IOPS,CPU,Latency,Bandwidth 가 순간적으로 과부하(증가) 발생됨.
(모든 VM(몇천대)은 스토리지에 이미지가 있음)
운영중 서비스에 영향을 미칠수 있음
그래서 salt 옵션중 -b (batch) 옵션으로 약 100~x개 로 분할하여 실행
아래와 같이 적절하게 나눠서 처리하면 순간적으로 증가하는 부하를 피할수 있음.
salt -G roles:xxx service.start ‘HealthService’ -b 100
참고 url : https://docs.saltstack.com/en/latest/topics/targeting/batch.html
참고
대용량 스케일에서 튜닝 포인트는 saltstack 공식 홈페이지에 있으나, 실제 운영중인 서비스에 맞게
적절하게 튜닝해야함 sample config (master Large Scale config) 파일은 8000 minion 기준으로 작성되어져 있음)
minion 10,000대 이상이나 그 이상일 경우는 운영하면서 여러가지 이슈가 발생할수 있다.
pupet chef 등 사용해 보았으나 saltstack이 구조적으로 심플하고 여러가지 운영 장점이 많아 saltstack 선택!
다양한 종류의 인프라 구성 자동화 툴 (devops tool) 이 있지만 가장 잘 다룰수 있고 운영 서비스에 적합한 tool을 선택하면 됨.
이외 기본적으로 ZeroMQ방식을 사용중이나 RAET 라는 전송 방식도 사용할수 있다고 한다.
참고 : https://docs.saltproject.io/en/latest/topics/transports/index.html
saltstack command example
Saltstack 특징 / 명령어 예제
비슷한 종류의 인프라 자동화 관리툴 (devops tools) 들이 많지만 saltstack 지향점은 아래와 같다.
” Infrastructure as data, not code “
pupet,chef,ansible : Infrastructure as Code
특정 언어를 이해해야함 , 구성 및 관리가 복잡함 (사용자별 느끼는 차이는 있을수있음 )
saltstack : Infrastructure as Data
python 으로 작성 되었지만, 특정 언어에 구애받지 않으며 단순하고 사람이 쉽게 읽을 수있는 YAML 파일과 Jinja 템플릿을 사용
saltstack 지향점은 “Infrastructure as Data”
-> 최대한 덜 복잡하게 (단순하게) 관리하며, 쉽고 빨리 배울수 있게 개발됨 code가 아닌 data 에 기반한 인프라스트럭처 모델을 지향 (code 가 아닌 data 기반으로 infra management)
DevOps and Web-scale IT require speed, agility and communications. The smaller the learning curve, the bigger competitive advantage available
학습 곡선이 작을수록 더 큰 경쟁력과 이점이 있다
Saltstack Command example
sample 명령어 보기 (Documentation on the system)
salt '*' sys.doc # output sys.doc (= all documentation) salt '*' sys.doc pkg # only sys.doc for pkg module salt '*' sys.doc network # only sys.doc for network module salt '*' sys.doc system # only sys.doc for system module salt '*' sys.doc status # only sys.doc for status module
down 된 minion 찾기 및 자동 key 삭제
salt-run manage.down 2>/dev/null | tee /dev/tty | wc -l
salt-run manage.down removekeys=True * down minion 찾아서 key 삭제
windows memory check
Memory 800MB 이상인 svchost.exe 찾기
salt -G roles:tax cmd.run ‘tasklist /fi “imagename eq svchost.exe” /fi “memusage gt 819200″‘ –out=txt | egrep -v “Session|=” > memory.txt
roles check
salt -C ‘not G@roles:aaa and not G@roles:bbb and not G@roles:ddd and not G@roles:eee ‘ test.ping –out=txt
minion 이 자동으로 등록되게 할때 (acceptkey=true) role 이 추가 안된 minion 찾기
위와 같이 cron에 걸어서 role이 없는것을 찾아서 -> 파일에 쓰고 -> grep로 특정 문자열 검색해서 -> grains.append 로 자동으로 추가
salt-cp
salt-cp -G roles:aaa /srv/salt/file/minion ‘c:\salt\conf\’ <- salt-cp 는 file size 100KB 이하일때 권장 (그 이상일경우에는 cp.get_file 함수 사용 권고)
salt ‘*’ cp.get_dir salt://windows/consul ‘C:\’ <- 폴더 단위 배포(복사)
salt ‘*’ cp.get_file /srv/windows/consul.exe ‘C:\’ <- 파일단위 배포(복사)
windows powershell 실행
특정 프로세스 시작 시간보기
salt -G roles:aaa cmd.run ‘Get-Process | select name, starttime | findstr python’ shell=powershell –out=txt
hyper-v host CSV mpio 검사
salt -G roles:host cmd.run ‘(gwmi -Namespace root\wmi -Class mpio_disk_info).driveinfo | % {Write-host “Name: $($_.name) Paths: $($_.numberpaths)”}’ –out=txt shell=powershell > mpio.list
salt list
salt -L `awk -vORS=, ‘{ print $1 }’ minions.list | sed ‘s/,$/\n/’` test.ping
특정 minion 리스트를 minions.list 파일에 리스트 저장후 읽어서 명령 실행하기
계정 관리
salt -G roles:mgmt user.add user01 (계정 생성)
salt -G roles:mgmt cmd.run ‘chage -d 0 user01’ (최초로그인시 암호 변경)
salt ‘*’ shadow.set_expire username 2017/12/31 (날짜 까지 계정 연장)
python -c “import crypt; print crypt.crypt(‘password’, ‘\$6\$SALTsalt’)”
salt MGT-XXX shadow.set_password user ‘위에서 만들어진 password’
windows event check 5120 5150 (hyper-v cluster 에러 관련)
salt -G roles:host cmd.run 'Get-WinEvent -FilterHashtable @{logname="system"; id=5120} -MaxEvents 1 | format-table machinename, id, userid, timecreated, message -autosize | Out-String -Width 700' shell=powershell --out=txt
minion restart
salt ‘*’ cmd.run_bg ‘C:\salt\salt-call.bat –local service.restart salt-minion’ (windows)
salt -C ‘not G@kernel:Windows’ cmd.run_bg ‘salt-call –local service.restart salt-minion’ (linux)
* minion config 파일 변경후 restart 할때 필요 , 백그라운드 프로세스로 실행됨
salt cp.push
salt ‘*’ cp.push /etc/fstab
salt ‘*’ cp.push /etc/system-release keep_symlinks=True
salt ‘*’ cp.push /etc/fstab upload_path=’/new/path/fstab’
salt ‘*’ cp.push /tmp/filename remove_source=True
* minion 의 특정 파일 -> master 서버 ( /var/cache/salt/master/minions/xxx ) 복사됨
* master 환경설정 file_recv: True , file_recv_max_size: 100 활성화 해줘야함
* 2016년 3월 버전에서는 안됨
전체 minion IP 확인 하기
salt-run manage.alived show_ipv4=True --out=txt --out-file=ipaddress.txt
PING , Port check
salt -G roles:xxxx network.ping 8.8.8.8 timeout=3
salt ‘*’ network.connect naver.com 80 timeout=3 family=ipv4
CPU usage ( % 사용량)
salt -G roles:xxxxx status.cpuload –out=txt | awk ‘{ if ($2~/^[0-9]+$/) print $0 }’ | awk ‘$2 > 95{print $1,$2}’
* awk 로 2번째 필드 숫자인것만 (간혹 salt minion이 응답없을때 문자열 error 가 출력됨) 필터 CPU load 가 95% 이상인것만 필터
file 내용 변경
salt hostname file.replace ‘c:\xxx\xxxx\xxx.ini’ pattern=’LOCALIP =’ repl=’##LOCALIP = 127.0.0.1′
saltstack 활용 사례 / SECOPS
DevOps 와 마찬가지로 IT 분야에서 핫 트렌디한 “SecOps” 에 대한 포스팅을 해봅니다.
정의
DevOps가 소프트웨어 개발자 및 운영 전문가를 통합 하는 방식과 마찬가지로
SecOps는 보안 및 운영 팀을 연결하는 관리 방식 즉, 개발부터 서비스 론칭 단계까지의 전체 과정에
IT 보안 실무를 통합 할수 있는 모델이다.
목표
개발 초기 단계 또는 모든 단계에서 보안 프로세스를 도입, 접목 시키는것
지속적인 보안 컴플라이언스 자동화
보안에 대한 책임을 공유하여 비즈니스, 제품 및 서비스의 보안 상태를 향상 시키는 것
효과
ROI 향상
생산성 향상
리소스 감소
보안 문제 감소
보안 감사 절차 개선
SecOps 대표 활용 사례
IBM Cloud 는 saltstack 자동화 도구를 활용하여 SecOps 구현
단, 12명의 엔지니어로 전세계 80개 IDC / 70,000개 이상의 노드에 보안 컴플라이언스 수행
자동화 및 오케스트레이션 기능으로 새로운 보안 정책을 자동으로 배포 하고 새로운 보안 위협에 지속적 대응 가능
IT 시스템에 대한 취약성 자동 교정 및 자동화된 보안 감사 수행
SecOps 세부 활용 사례 1. saltstack 사용 heartbleed (하트블리드) 취약점 패치
SecOps 세부 활용 사례 2. saltstack 사용 wannacry (SMB 취약점) 취약점 패치
saltstack은 ansible,pupet,chef 등과 유사한 인프라 자동화 관리 툴입니다. saltstack은 오픈 소스도 있지만, 유료버전이 있습니다. 유료 버전중 secops라는 제품을 별도로 사용 할수 있습니다.
자세한 내용은 https://www.saltstack.com/products/secops/ 현재는 vmware가 인수 한듯하네요 …
saltstack secops 관련 블로그나 웹상의 자료에서 많이 등장 하는 용어가 있습니다.
Escape Compliance Hell with SaltStack SecOps
“보안 감사 지옥에서 탈출” 아마 많은 현업 종사자들이 공감하고 희망하는 문구 일것입니다. 회사마다 차이점은 있겠지만 보안 감사나 보안과 관련된 업무 비중은 상당히 높은 편입니다. 아마 국내 뿐 아니라 해외에서도 위와 같은 Needs 가 있어 saltstack SecOps를 개발 한게 아닐까요
필자는 saltstack secops 제품이 나오기 몇년전 부터 saltstack를 사용하여 ISMS 점검 항목중 CCE나 기타 몇몇 항목에 대하여 ISMS 증적 자료 취합을 자동화 하여 업무 프로세스를 개선한 경험이 있습니다. 예를 들자면, 몇백대~수천대의 linux , windows 서버의 계정 보안 정책 적정성에 대한 증적 자료 수집 및 자동 리포팅
이렇게 하면 ISMS 증적 자료를 자동으로 취합하여 시간 단축이나 업무 효율성 측면에서 장점을 극대화 할수 있습니다. 당시에도 필자는 보안 컴플라이언스 기준 이나 보안 정책 리스트에 부합하여 지속적으로 점검 (감사) 하며, 운영중인 자산(서버,네트워크 장비등)의 보안 취약성에 대하여 쉽게 탐지 및 보안 정책을 적용 할수 있는 솔루션이 있으면 좋겠다는 생각을 했었습니다. 몇 년후 saltstack에서 secops라는 상용 제품을 출시한걸 보고 반가울 따름이었습니다. 다만 비용을 지불해야 한다는것에 대한 아쉬움…
하지만 어느 정도 개발 기술력이 된다면 스크립트 처리나 기타 다른 방법으로 굳이 saltstack secops 상용 제품을 사지않고 saltstack 오픈소스 만으로도 각 회사의 보안 컴플라이언스 기준에 부합되며 만족하는 결과물을 충분히 만들어 낼수 있습니다. 화려한 웹 UI나 화려한 보고서는 무리겠지만요.
상용 제품중에도 CCE,CVE,CWE 등에 대한 보안 취약성 점검을 해주는 좋은 솔루션도 다수 있습니다. 하지만, 비용 부담 문제도 있기에 saltstack open source 도구를 활용하여 보안 실무 프로세스에 도입 한다면 수많은 이점을 가져 올거라 생각 합니다. 더불어 SecOps 모델이 추구하는 목표에 한발짝 다가 갈수 있을거라 생각됩니다.