본문 바로가기
서버구축 (WEB,DB)

Redis Lua Scripting 보안 취약점 완화 및 안전한 실행 환경 구축

by 날으는물고기 2025. 2. 14.

Redis Lua Scripting 보안 취약점 완화 및 안전한 실행 환경 구축

Redis Transactions & Long-Running Lua Scripts - ScaleGrid

Redis의 Lua 스크립트 실행 기능은 강력한 확장성을 제공하지만, 최근 보안 취약점(CVE-2024-31449, CVE-2024-46981 등)이 발견됨에 따라 보안 강화가 필수적입니다. Redis Lua 스크립트 실행 환경을 보다 안전하게 구성하는 방법입니다.

Redis 최신 버전으로 업데이트

Redis의 보안 취약점이 해결된 최신 버전으로 업데이트해야 합니다. 현재 패치가 적용된 버전은 다음과 같습니다.

  • Redis 7.4.2
  • Redis 7.2.7
  • Redis 6.2.17

업데이트 방법

  • Redis 개발팀은 cmsgpack 및 struct 라이브러리 관련 보안 문제를 해결하는 패치를 제공했습니다.
  • Redis의 Lua 스크립트 실행을 악용하여 원격 코드 실행(RCE) 가능성이 있었으므로, 최신 버전 사용이 필수적입니다.

 

Debian/Ubuntu

sudo apt-get update && sudo apt-get install redis-server

CentOS/RHEL

sudo yum update && sudo yum install redis

Docker 컨테이너

docker pull redis:latest
docker run -d --name redis-secure redis:latest

🔗 Redis 공식 릴리스 노트

Lua 스크립트 실행에 대한 접근 통제

1. ACL을 사용하여 EVAL/EVALSHA 제한

Redis의 ACL(Access Control List) 기능을 활용하여 특정 사용자만 Lua 명령어를 실행하도록 제한할 수 있습니다.

 

특정 사용자에게만 EVALEVALSHA 허용

ACL SETUSER lua_user on >securepassword ~* +eval +evalsha
ACL SETUSER default off ~* -eval -evalsha
  • lua_user: Lua 스크립트 실행을 허용한 사용자
  • default: 기본 사용자에게 EVAL, EVALSHA 실행 금지

 

모든 사용자에서 EVAL/EVALSHA 완전히 비활성화 (redis.conf 수정)

rename-command EVAL ""
rename-command EVALSHA ""

2. Lua 스크립트 화이트리스트 적용

미리 검증된 스크립트만 실행되도록 제한

 

스크립트를 Redis에 등록하고 SHA1 해시값을 기록

SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])"

허용된 해시값만 실행하도록 애플리케이션에서 화이트리스트 적용

ALLOWED_SCRIPTS = {
    "c664a3bf70bd1d45c4284ffebb65a6f2299bfc9f"  # 허용된 SHA1 해시값
}

def execute_script(sha1_hash):
    if sha1_hash not in ALLOWED_SCRIPTS:
        raise ValueError("Unauthorized script execution attempt detected!")

Redis 프로세스 권한 최소화

1. Redis 실행 계정 제한

Redis 전용 사용자 생성

sudo adduser --system --group --no-create-home redis

redis.conf에서 Redis를 전용 계정으로 실행

user redis

데이터 디렉터리 및 로그 권한 설정

sudo chown -R redis:redis /var/lib/redis
sudo chown -R redis:redis /var/log/redis

2. Seccomp/Sandboxing 적용

Seccomp를 사용하여 불필요한 시스템 호출 차단

 

Redis Docker 컨테이너 실행 시 Seccomp 적용

docker run --security-opt seccomp=./seccomp_profile.json redis:latest

✔ Seccomp 프로파일 예시 (seccomp_profile.json)

{
    "defaultAction": "SCMP_ACT_ERRNO",
    "syscalls": [
        { "names": ["read", "write", "close", "fstat"], "action": "SCMP_ACT_ALLOW" }
    ]
}

AppArmor를 사용한 실행 제한

sudo aa-complain /etc/apparmor.d/usr.sbin.redis-server

네트워크 보안

1. 바인딩 인터페이스 제한

Redis를 외부에서 접근하지 못하도록 설정

bind 127.0.0.1

2. TLS 암호화 활성화

OpenSSL로 인증서 생성

openssl req -x509 -nodes -newkey rsa:2048 -keyout redis.key -out redis.crt -days 365

redis.conf에서 TLS 활성화

tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
tls-port 6379

Redis 클라이언트에서도 TLS 활성화

redis-cli --tls --cert redis.crt --key redis.key

Lua 스크립트 보안 점검

1. 입력값 검증

Lua 스크립트에서 전달받은 모든 입력값을 검증해야 합니다.

 

안전한 Lua 스크립트 예제

local key = KEYS[1]
local value = ARGV[1]

-- 입력값 검증
if not key or not value then
    return redis.error_reply("Invalid input")
end

return redis.call("SET", key, value)

2. 외부 호출 차단

  • Lua 스크립트에서 외부 파일 I/O 및 Shell 호출 방지
  • Redis 설정에서 sandbox 기능을 활성화

운영 모니터링 및 감사

1. Redis 명령 로깅

Redis에서 실행된 모든 명령을 로깅하여 비정상적인 Lua 스크립트 실행을 감지할 수 있습니다.

 

redis.conf 설정

loglevel notice
logfile /var/log/redis/redis.log

2. Lua 스크립트 실행 실시간 모니터링

redis-cli monitor | grep -E 'EVAL|EVALSHA'

 

Redis 최신 버전 업데이트: 취약점 패치 적용
ACL로 Lua scripting 접근 제한EVAL 비활성화
Redis 프로세스 권한 최소화Seccomp/AppArmor 적용
네트워크 접근 통제 (TLS 암호화, bind 127.0.0.1)
Lua 스크립트 보안 점검 (입력값 검증, 외부 호출 차단)
실행 로그 및 Lua 스크립트 모니터링 (logfile, redis-cli monitor)

 

Redis의 Lua 스크립팅 기능을 안전하게 운영하려면 최신 보안 패치를 적용하고, ACL 제한, 실행 환경 격리, 네트워크 보안 설정을 철저히 관리하는 것이 필수적입니다. 이러한 보안 조치를 준수하면 Redis 환경에서 안전하게 Lua 스크립트를 실행할 수 있습니다.

728x90

댓글