- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 엑셀에서 매크로가 자동 실행되는 상황을 체계적으로 진단하고, 개인·팀·기업 환경에서 즉시 적용 가능한 차단 설정과 우회 방지 방법, 파일·정책·레지스트리·폴더 수준의 통제 전략을 제공하는 것이다.
왜 매크로 자동 실행이 발생하는가
엑셀에서 매크로가 자동으로 실행되는 대표 원인은 다음과 같다.
Workbook_Open또는Auto_Open이벤트 프로시저가 통합문서 열림 시 실행되기 때문이다.- XLSTART 폴더에 있는 통합문서·템플릿·추가 기능이 엑셀 시작과 동시에 로드되기 때문이다.
- 신뢰할 수 있는 위치(Trusted Locations) 또는 신뢰된 문서로 지정되어 보안 경고 없이 매크로가 작동하기 때문이다.
- 추가 기능(.xlam, COM Add-in)이 자동 로드되도록 설정되어 있기 때문이다.
- 보안 정책·레지스트리 설정이 “허용”으로 되어 있어 통제 없이 실행되기 때문이다.
가장 빠른 차단: 신뢰 센터 매크로 설정
개인 PC에서 즉시 적용 가능한 1차 방어선이다.
- 파일 → 옵션 → 보안 센터(Trust Center) → 보안 센터 설정 열기이다.
- 매크로 설정(Macro Settings)에서 아래 중 하나를 선택한다.
- 모든 매크로에 대해 알림 표시하고 비활성화(권장)이다.
- 서명된 매크로만 제외하고 모두 비활성화(조직용)이다.
- 모든 매크로 비활성화(알림 없음)(테스트용, 강력 차단)이다.
- 신뢰할 수 있는 위치, 신뢰할 수 있는 문서 탭에서 불필요한 항목을 모두 제거한다.
열릴 때만 막기: Shift/안전 모드
- Shift 키 누르고 통합문서 열기를 사용하면
Auto_Open과Workbook_Open실행을 우회할 수 있다. - 엑셀 안전 모드: 실행 시 Ctrl 키를 누른 채 시작하거나
excel /safe로 실행한다. 추가 기능과 시작 폴더 로드가 제한된다.
XLSTART 및 시작 로드 경로 점검
엑셀은 시작 시 아래 폴더의 파일을 자동 로드한다.
- 사용자 XLSTART:
%AppData%\Microsoft\Excel\XLSTART이다. - 공용 XLSTART: 설치 경로의
OfficeXX\XLSTART하위 폴더이다. - 대체 시작 폴더: 파일 → 옵션 → 고급 → 일반 → 시작 시 모든 파일을 이 폴더에서 열기 경로이다.
아래 PowerShell 명령으로 위험 파일을 식별한다.
dir "$env:APPDATA\Microsoft\Excel\XLSTART","$env:ProgramFiles\Microsoft Office\root\Office16\XLSTART" -ErrorAction SilentlyContinue | Where-Object { $_.Extension -in ".xls",".xlsm",".xlam",".xlt",".xltm" } | Select-Object FullName, LastWriteTime 추가 기능 차단
- 파일 → 옵션 → 추가 기능이다.
- 하단 “관리”에서 각각 Excel 추가 기능, COM 추가 기능, 자동화 추가 기능을 선택하고 이동한다.
- 불필요 항목 체크 해제 후 확인이다.
MOTW(웹에서 내려받은 파일 표시)와 보호 보기
- 브라우저·메일에서 받은 파일은 “인터넷” 영역 표식(MOTW)을 가진다. 이 표식이 있을 경우 기본 정책이 매크로를 자동 차단한다.
- 파일 속성에서 “차단 해제”를 체크하면 표식이 제거된다. 자동 실행을 막으려면 차단 해제 금지를 사용자 지침에 포함한다.
- 보호 보기에서 인터넷에서 온 파일, 잠재적으로 안전하지 않은 위치 항목을 활성화하여 열기만 하고 편집·매크로는 차단한다.
개발자 관점: 코드에 ‘킬 스위치’ 내장
업무 자동화 통합문서라도 조건이 충족될 때만 실행되도록 방어 코드를 넣는다.
' ThisWorkbook 모듈 Private Sub Workbook_Open() On Error Resume Next If Sheets("Admin").Range("B1").Value <> "RUN" Then Exit Sub ' 필수 전처리... End Sub ' 표준 모듈 Public Sub Auto_Open() If Not AllowRun() Then Exit Sub ' 주 루틴... End Sub
Private Function AllowRun() As Boolean
On Error GoTo Quit
If Environ$("USERNAME") = "" Then GoTo Quit
If ThisWorkbook.ReadOnly Then GoTo Quit
If Sheets("Admin").Range("B2").Value = "STOP" Then GoTo Quit
AllowRun = True
Exit Function
Quit:
AllowRun = False
End Function
프로그램으로 파일을 열 때 매크로 강제 비활성화
VBA 또는 외부 자동화에서 통합문서를 열 때 매크로를 강제로 꺼서 자동 실행을 원천 차단한다.
' VBA에서 다른 통합문서 열기 전 Sub OpenNoMacro() Dim prev As MsoAutomationSecurity prev = Application.AutomationSecurity Application.AutomationSecurity = msoAutomationSecurityForceDisable Workbooks.Open "C:\Risky.xlsm" Application.AutomationSecurity = prev End Sub 레지스트리로 강제 차단(개인·테스트용)
버전 16.x(Office 2016~Microsoft 365) 기준 키 경로 예시는 다음과 같다.
reg add "HKCU\Software\Microsoft\Office\16.0\Excel\Security" /v VBAWarnings /t REG_DWORD /d 4 /f VBAWarnings=2알림 후 비활성화이다.VBAWarnings=3서명된 매크로만 허용이다.VBAWarnings=4알림 없이 전부 비활성화이다.
조직 정책(GPO)로 일괄 통제
Windows 도메인 환경에서 그룹 정책으로 다음을 배포한다.
- 사용자 구성 → 관리 템플릿 → Microsoft Excel 2016 → Excel 옵션 → 보안 → 신뢰 센터이다.
- VBA 매크로 알림 설정: 모든 매크로 비활성화 또는 서명된 매크로만 허용이다.
- 인터넷에서 받은 파일의 매크로 차단 정책 활성화이다.
- 신뢰할 수 있는 위치 비활성화, 신뢰된 문서 사용 안 함이다.
- 추가 기능 관리: 허용 목록만 로드, 사용자 추가 기능 설치 금지이다.
파일 형식으로 차단
- 매크로 없는 서식으로 저장:
.xlsx,.xltx이다. - 매크로 포함 파일(.xlsm, .xltm)을 기본 업무 경로에 배치하지 않는다.
- 배포 파일은 기본적으로
.xlsx로 배포하고, 자동화 필요 시 별도 서명·정책 하에.xlsm을 제공한다.
신뢰할 수 있는 위치와 문서 재점검
신뢰할 수 있는 위치에 네트워크 공유나 다운로드 폴더가 들어가 있으면 자동 실행 위험이 급증한다. 다음을 수행한다.
- 신뢰할 수 있는 위치 목록에서 사용자 폴더·다운로드 폴더·공유 폴더를 제거한다.
- 신뢰된 문서 목록을 지우고, 재열람 시 경고가 다시 표시되도록 한다.
개발자·보안팀을 위한 서명 운영
- 매크로 프로젝트에 코드 서명을 도입하고, 신뢰할 수 있는 게시자만 허용한다.
- 서명 인증서 관리, 폐기 목록, 재서명 프로세스를 표준화한다.
진단·대응 절차(현장 체크리스트)
- 안전 모드 또는 Shift로 파일을 연다(자동 실행 우회)이다.
- 보안 센터 매크로 설정이 “차단” 상태인지 확인한다이다.
- XLSTART, 대체 시작 폴더, 추가 기능을 점검한다이다.
- 파일의 MOTW 여부 확인, 차단 해제 금지 정책 안내이다.
- 조직이라면 GPO 상태를 검증하고 표준 정책으로 강제한다이다.
- 필요 시 레지스트리 임시 차단으로 비상 통제한다이다.
방법별 효과와 적용 범위 요약
| 방법 | 적용 범위 | 장점 | 한계 |
|---|---|---|---|
| 신뢰 센터 매크로 차단 | 개인 PC | 간단, 즉시 적용 | 사용자 변경 가능 |
| Shift/안전 모드 | 개별 파일 | 즉시 우회 차단 | 사용자 숙련 필요 |
| XLSTART 정리 | 시작 시 전체 | 숨은 자동 로드 제거 | 관리 권한 필요 |
| 추가 기능 해제 | 전체 세션 | 지속적 로드 차단 | 업무 도구 비활성화 가능 |
| MOTW+보호 보기 | 외부 파일 | 다운로드 기원 차단 | 내부 파일엔 적용 약함 |
| 레지스트리 VBAWarnings=4 | 개인 사용자 | 강력 차단 | 관리자 권한·유지관리 필요 |
| GPO(기업 정책) | 조직 전체 | 일관·강제 | AD 인프라 필요 |
| 서명·화이트리스트 | 중요 자동화 | 신뢰 기반 허용 | 인증서 운영 필요 |
| 파일 형식(.xlsx) | 배포 파일 | 구조적 차단 | 자동화 불가 |
| 코드 킬 스위치 | 특정 통합문서 | 조건부 실행 | 코드 수정 필요 |
현장에서 자주 묻는 실무 포인트
- Application.EnableEvents=False는 이벤트만 끌 뿐이며, 보안 정책을 대체하지 않는다. 세션 종료 후 원복될 수 있다.
- 개인 매크로 통합문서(PERSONAL.XLSB)가 자동 로드되어 매크로가 실행될 수 있다. XLSTART에서 일시적으로 다른 폴더로 이동하여 영향도를 확인한다.
- COM 추가 기능은 매크로 설정과 별개로 코드를 로드할 수 있으므로 별도로 관리한다.
사례형 대응 가이드
사례 A: 외부에서 받은 .xlsm이 자동 실행됨
- 속성 창에서 “차단 해제”가 체크되지 않았는지 확인한다.
- 보안 센터 → 매크로 설정을 “알림 후 비활성화” 이상으로 설정한다.
- Shift로 열고 코드 검토 후 신뢰된 게시자 서명이 있는지 확인한다.
사례 B: 엑셀만 열어도 광고 시트가 뜸
- 안전 모드로 실행한다.
- XLSTART 두 위치와 “시작 시 모든 파일 열기” 경로에 알 수 없는 파일이 있는지 점검한다.
- 추가 기능 목록에서 의심 항목을 해제한다.
사례 C: 배포용 템플릿의 의도치 않은 자동 실행
- 매크로 없는 형식(.xltx)으로 재배포한다.
- 필요 시 코드에 킬 스위치와 사용자 확인 메시지를 추가한다.
- 신뢰된 게시자 서명을 적용하여 무단 수정 위험을 낮춘다.
보안 강화 체크리스트
- 기본 정책: “알림 후 비활성화” 또는 “서명만 허용”이다.
- MOTW 차단, 보호 보기 활성화이다.
- 신뢰할 수 있는 위치 최소화, 신뢰된 문서 초기화이다.
- XLSTART·추가 기능 화이트리스트 운영이다.
- 조직은 GPO로 강제, 감사를 위한 로깅을 병행한다.
FAQ
매번 경고 없이 완전 차단하려면 어떻게 하나?
보안 센터에서 “모든 매크로 비활성화(알림 없음)”을 선택하거나 레지스트리의 VBAWarnings를 4로 설정한다. 조직에서는 동일 정책을 GPO로 강제한다.
어떤 파일이 시작 시 자동으로 로드되는지 한 번에 확인할 수 있나?
PowerShell로 사용자·공용 XLSTART와 대체 시작 폴더를 열람한다. 목록에서 알 수 없는 파일을 격리하고 기능 영향도를 확인한다.
서명된 매크로만 허용하면 안전한가?
상대적으로 안전하지만, 서명 키 유출·오용 가능성은 남아 있다. 키 관리와 게시자 신뢰 체계가 전제되어야 한다.
Shift로 막히지 않는 경우가 있나?
특정 COM 추가 기능이나 타 프로세스에서 여는 시나리오 등은 Shift 우회에 영향을 받지 않을 수 있다. 이런 경우 안전 모드와 정책 차단을 결합한다.
PERSEONAL.XLSB 때문에 자동 실행된다면?
XLSTART에서 PERSONAL.XLSB를 일시 이동 후 영향 여부를 확인한다. 꼭 필요하면 코드에 킬 스위치를 추가하고 신뢰된 게시자 서명을 적용한다.
결론
매크로 자동 실행을 막는 최적 전략은 “기본 차단, 서명 기반 최소 허용, 시작 경로·추가 기능 정리, 정책 강제”의 4축으로 요약된다. 개인 환경은 보안 센터와 시작 폴더 정리로, 조직 환경은 GPO와 서명 운영으로 일관성을 확보하는 것이 가장 효율적이다.