Skip to content

Commit 04dc3e0

Browse files
shallemmattaereal
andauthored
Feature/opsec/mfa (#452)
* Added MFA overview, and updated contributors file. * Build fix and language updates. * Refine MFA overview and recommendations Revised language for clarity and emphasis on MFA importance. Updated recommendations for MFA methods and highlighted security considerations for passkeys. * Further clarification about passkey storage. --------- Co-authored-by: Matías Aereal Aeón <388605+mattaereal@users.noreply.github.com>
1 parent 8e5fe71 commit 04dc3e0

3 files changed

Lines changed: 82 additions & 28 deletions

File tree

docs/pages/config/contributors.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,5 +665,19 @@
665665
{ "name": "New-Joiner", "lastActive": "2026-03-17" },
666666
{ "name": "Active-Last-7d", "lastActive": "2026-03-23" }
667667
]
668+
},
669+
"shallem": {
670+
"slug": "shallem",
671+
"name": "Seth Hallem",
672+
"avatar": "",
673+
"github": "https://github.com/shallem",
674+
"twitter": "https://x.com/seth_certora",
675+
"website": "https://www.certora.com/",
676+
"company": "Certora",
677+
"role": "steward",
678+
"job_title": null,
679+
"description": "Steward of Opsec framework",
680+
"badges": [
681+
]
668682
}
669683
}

docs/pages/opsec/mfa/overview.mdx

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ title: "Multi-Factor Authentication | Security Alliance"
33
tags:
44
- Security Specialist
55
- Operations & Strategy
6+
contributors:
7+
- role: wrote
8+
users: [shallem]
69
---
710

811
import { TagList, AttributionList, TagProvider, TagFilter, ContributeFooter } from '../../../../components'
@@ -15,7 +18,31 @@ import { TagList, AttributionList, TagProvider, TagFilter, ContributeFooter } fr
1518
<TagList tags={frontmatter.tags} />
1619
<AttributionList contributors={frontmatter.contributors} />
1720

18-
Placeholder for Multi-Factor Authentication content
21+
MFA is necessary but not sufficient as an OpSec strategy. If you have not yet implemented MFA, we suggest making it your first priority as soon as you finish reading this page.
22+
23+
Not all MFAs are created equally. A few recommendations:
24+
25+
1. **Stay away from text and email as MFA methods.** There are innumerable reasons why neither of these methods
26+
is a good idea. Suffice it to say, best practices have long since outlawed these MFA methods.
27+
28+
2. **TOTP (e.g., Google Authenticator) is good but not great.** Why? It is easy enough to trick users into
29+
entering TOTP codes into a phishing site. The methods cited below are more difficult to exploit. Also, any manual typing is susceptible to keyloggers.
30+
31+
3. **Push-based MFA is better.** Why? Because initiating a push notification on iOS/Android requires that the
32+
device itself be enrolled with the identity provider. Phishing sites cannot initiate a push notification to
33+
the Gmail app, for example, without a major compromise of Google's infrastructure.
34+
35+
4. **Passkeys are the best.** Biometrics are hard to fake, and in a world where attackers are looking for low
36+
hanging fruit, passkeys protected by biometric factors are typically too hard for them to reach. However, passkey storage is critical to ensuring that this choice is secure - please read the note below.
37+
38+
5. **Key admins (e.g., your G Suite admin) should be using Yubikeys.** They are inexpensive and easy. There is
39+
no excuse here for not protecting the keys to the castle with the industry gold standard for MFA.
40+
41+
Once you have MFA in place, you are ready to move on to the next step in your Opsec framework. However, before you declare your MFA journey a success, make sure you haven't forgotten any of your communication tools along the way. In this industry, we often use a combination of X, Signal, and Telegram, and each of them can and should be protected with an additional authentication factor. Also, note that the more you allow one-off sign-ins for each tool you use, the more you have to be concerned about the MFA features of each tool. Implementing single sign-on wherever possible is the best way to enforce MFA across all the tools you use.
42+
43+
Take into consideration that, while using passkeys seems the most appropriate course of action, using them irresponsibly could lower your security posture. Passkeys only improve security when they remain tied to a strong device and recovery model; used carelessly, they can weaken it by shifting trust from a hard-to-phish login flow to softer cloud sync and account recovery paths. A common failure case is storing high-value passkeys in consumer sync ecosystems protected by weak recovery, reused credentials, SMS reset, or unmanaged devices, so an attacker who compromises the sync account can restore those passkeys on their own device and log in cleanly with what appears to be strong authentication. In that setup, the passkey itself is not broken, but the overall security posture is worse because the real attack surface becomes account recovery, device enrollment, and endpoint compromise rather than direct credential theft. A typical mistake would be to store a passkey in the Google password manager for your personal Google account, which may not be adequately protected with a strong password, MFA, and a secure account recovery method.
44+
45+
To address the passkey storage issue, this section should be read in conjunction with the section (coming soon) about password handling and password management. Passkeys are the strongest form of MFA when stored in a secure password manager with biometric authentication (e.g., Bitwarden, 1Password). Passkeys stored in a personal account that uses phone or SMS as a recovery mechanism make overall security worse, not better. Before finalizing any decision to migrate to passkeys, please read the password management section and ensure that you are ready to store your passkeys securely.
1946

2047
</TagProvider>
2148
<ContributeFooter />

utils/fetched-tags.json

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,18 @@
486486
"/guides/account-management/vercel": [
487487
"DevOps Accounts"
488488
],
489+
"/guides/endpoint-security/hardware-security-keys": [
490+
"Security Specialist"
491+
],
492+
"/guides/endpoint-security/password-manager-endpoint-hardening": [
493+
"Security Specialist",
494+
"Operations & Strategy",
495+
"Engineer/Developer"
496+
],
497+
"/guides/endpoint-security/ssh-client-and-key-management-hardening": [
498+
"Engineer/Developer",
499+
"Security Specialist"
500+
],
489501
"/guides/endpoint-security/zoom-hardening": [
490502
"Security Specialist",
491503
"Operations & Strategy"
@@ -895,7 +907,8 @@
895907
],
896908
"/opsec/endpoint/overview": [
897909
"Security Specialist",
898-
"Operations & Strategy"
910+
"Operations & Strategy",
911+
"HR"
899912
],
900913
"/opsec/google/overview": [
901914
"Community & Marketing",
@@ -1269,45 +1282,45 @@
12691282
]
12701283
},
12711284
"sectionMappings": {
1272-
"Community Management": "community-management",
1285+
"AI Security": "ai-security",
12731286
"Awareness": "awareness",
1274-
"Operational Security": "opsec",
1275-
"OpSec Core Concepts": "opsec",
1276-
"While Traveling": "opsec",
1277-
"Wallet Security": "wallet-security",
1278-
"Signing & Verification": "wallet-security",
1279-
"Multisig for Protocols": "multisig-for-protocols",
1280-
"Multisig Administration": "multisig-for-protocols",
1281-
"Operational Runbooks": "multisig-for-protocols",
1282-
"For Signers": "multisig-for-protocols",
1287+
"Community Management": "community-management",
1288+
"DevSecOps": "devsecops",
1289+
"Isolation & Sandboxing": "devsecops",
1290+
"DPRK IT Workers": "dprk-it-workers",
1291+
"Encryption": "encryption",
1292+
"ENS": "ens",
12831293
"External Security Reviews": "external-security-reviews",
12841294
"Smart Contract Audits": "external-security-reviews",
1285-
"Vulnerability Disclosure": "vulnerability-disclosure",
1286-
"Infrastructure": "infrastructure",
1287-
"Domain & DNS Security": "infrastructure",
1288-
"Monitoring": "monitoring",
12891295
"Front-End/Web Application": "front-end-web-app",
1296+
"Governance": "governance",
1297+
"Identity and Access Management IAM": "iam",
12901298
"Incident Management": "incident-management",
12911299
"Playbooks": "incident-management",
12921300
"Incident Response Template": "incident-management",
12931301
"Templates": "incident-management",
12941302
"Runbooks": "incident-management",
1295-
"Threat Modeling": "threat-modeling",
1296-
"DPRK IT Workers": "dprk-it-workers",
1297-
"Governance": "governance",
1298-
"DevSecOps": "devsecops",
1299-
"Isolation & Sandboxing": "devsecops",
1303+
"Infrastructure": "infrastructure",
1304+
"Domain & DNS Security": "infrastructure",
1305+
"Monitoring": "monitoring",
1306+
"Multisig for Protocols": "multisig-for-protocols",
1307+
"Multisig Administration": "multisig-for-protocols",
1308+
"Operational Runbooks": "multisig-for-protocols",
1309+
"For Signers": "multisig-for-protocols",
1310+
"Operational Security": "opsec",
1311+
"OpSec Core Concepts": "opsec",
1312+
"While Traveling": "opsec",
13001313
"Privacy": "privacy",
1301-
"Supply Chain": "supply-chain",
1302-
"Security Automation": "security-automation",
1303-
"Identity and Access Management IAM": "iam",
1314+
"Safe Harbor": "safe-harbor",
13041315
"Secure Software Development": "secure-software-development",
1316+
"Security Automation": "security-automation",
13051317
"Security Testing": "security-testing",
1306-
"AI Security": "ai-security",
1307-
"ENS": "ens",
1308-
"Safe Harbor": "safe-harbor",
1309-
"Encryption": "encryption",
1318+
"Supply Chain": "supply-chain",
1319+
"Threat Modeling": "threat-modeling",
13101320
"Treasury Operations": "treasury-operations",
1321+
"Vulnerability Disclosure": "vulnerability-disclosure",
1322+
"Wallet Security": "wallet-security",
1323+
"Signing & Verification": "wallet-security",
13111324
"Guides": "guides",
13121325
"Account Management": "guides",
13131326
"Endpoint Security": "guides",

0 commit comments

Comments
 (0)