Can a MAC be used as an irreversible PCI Token? I'm looking at implementing a PCI token generation process based on a MAC code obtained from the PAN. This would be an irreversible token.

The method I have in mind seems OK to me, but I'm not quite sure it would fly with a QSA. Some advice on the potential fails of my recipe would be very much appreciated.

Here are the details :

The token would be a 32 digits value, 10 of which would be decimal and 8, hexadecinal. The 10 decimal digits would be the first 6 and last 4 digits from the PAN. They are added only to create variety and avoid collisions;
The 8 hex digits would be a CBC MAC obtained from a 32 characters string formed by the PAN XORed with a salt, plus some padding made from some (repeated) PAN digits;

The HSM I'm using only supports 3DES with double-length keys (no AES, no SHA-256,etc...);

Does anyone have an opinion on this method?

There is a specific tokenization guideline available in order to better understand the requirements and constraints of PCI-DSS in this regard.

This guideline specifies that there are different approaches regarding tokenization, being one of them "A one-way non-reversible cryptographic function (e.g., a hash function with strong, secret salt)". In addition, it allows a token format like 6+(Tokenized Value)+4.

In your scenario, from what I can ascertain, as long as the salt value used for your MAC-CBC is kept secret and unpredictable (thus making infeasible a bruteforce / collision attack in order to obtain the full PAN), you should be good in the eyes of a QSA.


HTTP methods to be supported for CRL downloading I was not able to find anywhere in the RFCs which HTTP methods must be supported by the conformant CAs in order to allow users to download CRL.

What are the mandatory HTTP methods (GET, HEAD, ...) for CRL?

RFC (to be precisely, RFC5280) doesn't define required protocols to be supported by CA for CRL/CRT download. It must be defined in a form supported by both, client and server. Thus, HTTP is not mandatory (though, recommended) at all. Major crypto clients (including CryptoAPI) use GET method to retrieve CRL/CRT files.


Back-end changing the url We have a WAF in front of our environnement.
Let's say now

the client ask for example.com
The waf make a redirect (303) saying https://example.com

Now the communication is established between the client and the WAF.

If now, my back-end have a rule saying "everything comming on port 80 must be redirected to www.example.com"

For precisions, the WAF and the back-end can only communicate with the port 80

My question:

The client send his request https://example.com
The waf send it to the back-end (http://example.com)
The bak-end answer http://www.example.com

Will the WAF will overwrite www.example.com by https://example.com

If I understand your question correctly you are basically asking if the WAF will handle the redirect send by the backend locally by issuing a new request to the backend, or if the WAF
will pass the redirect through to the original client.

While there is no single type of WAF I would expect the WAF to pass the redirect to the client since it might otherwise break functionality. Such redirects are often used to store some state in the client, like a cookie or in case of a permanent redirect the preference to use HTTPS instead of HTTP or to use a different domain or to use a client-specific path. Since is important that the client keeps this (often client-specific) state the redirect needs to be passed through to the client.


How to restore devices like IP phones to productive use after unexplained activity? I'm trying to consider how to properly vet devices that have exhibited unexplained activity for future deployment. Let's just consider my current scenario as an example, but I am interested in this from a broader standpoint.

We have two IP phones that were purchased at the same time that are behaving strangely and differently from our other otherwise identical Phones. They are not connected with our network at all at this point and all my research was done within a tightly controlled environment monitoring and blocking all network activity. They make unexpected connections in the background over SIP ports to North Korea, Nigeria and China. The manufacturer hasn't confirmed that this is expected activity, but the vendor has verified that the device was acquired directly from the manufacturer.

I've lost confidence in this hardware. Is there any way to regain confidence in it to the point where re-deploying them is a reasonable action?

I'm sure the safest action is just to dump them. Maybe my time isn't worth the effort, but ignoring the time/money issue, is there a way to be reasonably sure that the devices do not pose a threat?

I know that what is reasonable is subjective, but what steps might be taken in that direction? What scenarios need to be considered and how would they be mitigated?

Since these are embedded devices, it's hard to say exactly as far as details. Perhaps you can have the manufacturer provide you with a method of securely wiping the phones and replacing what is on there with their latest firmware? They could also potentially provide a way to integrity check the firmware images, BIOS, etc. After performing all this, doing the same network traffic monitoring you have done will confirm whether they are still making suspicious outbound connections. If you went through those steps and the network traffic appeared clean over a reasonable period of time, then you can feel safe reintroducing them back into production.


TLS Handshake gets torn down I am trying to debug a TLS handshake between two SIP trunk endpoints: .75 and .82. Mutual authentication is being used.

.75 sends:

  Client Hello
  Certificate, Client Key Exchange
  Certificate Verify, Change Cipher Spec, Encrypted Handshake Message
  Encrypted Alert

.82 sends:

  Server Hello, Certificate, Certificate Request, Server Hello Done
  Change Cipher Spec, Encrypted Handshake Message
  [FIN, ACK]

From the wireshark trace on .75, the details of the Encrypted Alert is:
Content Type: Alert (21)

How do I know what causes the failure from 82?

Your .75 machine (the client) sends an "encrypted alert" message. If it does that, then this machine, at that point, believes that the connection is still up and running, and the server will be able to receive the alert message, and in particular decrypt it. Otherwise, what would be the point of sending that message ? Therefore, it is probable that the FIN message from the server has been sent after receiving this alert. Quite possibly, the client sends an alert which triggers the connection closure, and the server reacts by closing the transport medium (the FIN packet).

Note that in a normal handshake, the server will wait for reception of the Finished message from the client (the "encrypted handshake message" after the Change Cipher Spec) before sending its own Change Cipher Spec and Finished. We see that here, so the server was able to process the Finished message from the client, including decryption, MAC verification and message contents.

Assuming that both implementations conform to the standard, the "encrypted alert" message is not a close_notify warning. A close_notify is an alert message which warns the recipient of the intention of the sender to gracefully terminate the connection. The recipient must then reply with a close_notify of its own, marking its acceptance of that fact. Here, the client sends an alert message but no alert message is sent in response by the server, so we might surmise that we are not witnessing a graceful termination with a pair of close_notify. Most plausibly, the client's alert is a fatal alert, which tells to the server that something is amiss, and that the connection is doomed. The server can then only close the transport medium because there is nothing else that it can do at that point.

There is no indication as to what bothered the client enough to make it send an alert; however, there are rather decisive indications that all cryptographic operations went well.

You may want to run two network captures on both systems, so that you may get precise timings for all packets; it helps in reconstructing the actual sequence of events.


Installing own certificate for HTTPS sniffing? This is something I heard before but cannot remember how to do, I am looking for a tutorial or alike.

I have an Android application I need to audit. I need to check if any cookies are being transmitted, unfortunately the traffic is HTTPS.

I have been told it is possible to install my own certificate onto the Android phone and then I can decrypt the traffic in Wireshark.

I have full access to the phone and computer I am auditing so installing any certificates is not an issue.

Does anybody have a guide as to how this is performed?

EDIT: This unanswered question is what I want to do https://stackoverflow.com/questions/45300728/import-self-signed-certificate-in-android-to-sniff-https-traffic

Possible answer: I might have answered my own question, this appears to decrypt HTTPS. Simply install the Charles certificate onto the device first. I will wait for somebody to confirm? https://www.charlesproxy.com/

Use mitproxy and sslsplit to manipulate your phone and make your computer pretend to be the server. You will need to install the newly forged certificate in your mobile phone so that your phone doesn't raise any warnings.
Check out this post.


How should backups be tested in large offices? I always hear people say "test your backups", but I have no idea how that is done in practice when you have to deal with complex infrastructures.
For personal backups it's easy to rely on something like checksums, because all you have to recover is your own files (pictures, zip files, documents, etc.). So if you compare the checksums every once in a while, you can be sure that your files are readable and are ok. You can then restore them manually, if you need to.
But when you need to backup data in businesses / companies / organizations, you have to deal with complex infrastructures: large offices, several servers, multiple machines, users with different roles, lots of configurations, more files, etc. And you also need to avoid downtime, so I suppose the whole environment should be able to be restored quickly and automatically. The question is: how do you make sure the whole backup process works and keeps on working (generating valid backups that can actually be restored), in such a complex infrastructure? Testing with full restores doesn't seem feasible, I guess, unless you have a "copy" of the whole company to use as a testing field (like a huge empty office with lots of machines to simulate a restore). So I suppose you need to test the backups in other ways, but I have no idea what this whole testing process could be.
So what I'm asking is how backups are tested in large-enough companies, in practice, including all the necessary steps (what is usually backed up, what is usually not backed up, where it is backed up, how it is tested, how often, and what machines, software, and people are usually involved in the process).

It looks like you are combining a few different concepts into one: copy validation, testing of restoration procedures, and fully restoring the entire enterprise. And It also looks like you are combining the difficultly of restoring data files and entire infrastructures. We need to pull this question apart.
Checksums are for validation of the integrity of the copy. It's not a "test". Validation is done at copy time to guarantee a faithful copy.
Infrastructure complexity does not make verification more difficult. It does create a complicated environment to test the restoration process. But this is easily accomplished using virtual environments, or dev/test infrastructure. I often use the virtual dev environment to restore core services and their dependencies. In one org, we would restore core VMs nightly from the previous backup/snapshot, run automated tests, and delete the VMs.
But for full enterprise restoration, that's a different matter entirely. I know of no org that tests an end-to-end restore of the entire enterprise infrastructure. At best, I have participated in tabletop exercises to map out dependencies and then we validated parts of the process. It is simply not feasible to test a whole-enterprise process, if for no other reason than the many risks that it can present.
So when people say "test your backups", what they mean is that you have tested that you can restore what you've backed up. It is best if you can test the end-to-end processes and to be able to restore the entire enterprise, but that's not expected because the costs, complexities, and risks get to be very high.

The reasons for testing are numerous and borne from a thousand horror stores.
Like:

The new tech who was taught the backup tape handling procedure from his predecessor but mixed up the process for packing up tapes for off-site storage and degaussing the returned tapes. The poor guy was degaussing the new backup tapes for months.
The tech who would flip the "copy protect" switch on the tapes before inserting them in the tape machine. The machine was old and didn't alert on this problem. The company had blank backup tapes going back years.
The tech who bought a cheap USB drive for backups, but the USB drive was fraudulent and kept overwriting old bytes to make room for new ones. It reported the saved files in the file system, but the files were not actually there.
The company who kept a very old tape backup system in operation, but the system was so degraded that the equipment was no longer able to perform reads from media, only writes. And the equipment used a proprietary format, so although the data was likely on the tapes, the company had no way of accessing it.

For all of these stories, a simple and regular test restoration would have highlighted a problem before the saved data was needed.


Can Windows Rootkits compromise Ubuntu? Windows 10 was my only operating system for a while and I had some bad security practices such as not keeping Windows up-to-date,installing software from third party websites.
Today I have both Windows 10 and Ubuntu 21.04 installed on my system.
I updated Windows 10 and I scanned my system with various antivirus software and Microsoft Defender Offline.
Windows Defender detected one Trojan which I removed it.
Now I'm worried if I downloaded some Rootkit in Windows that compromised my hardware/firmware,BIOS,etc.
Both operating systems are working properly.
Is there anyway to detect such Rootkits?
From my understanding they are very hard to detect.

I'm not sufficiently familiar with the tool to give a proper response to your question about the results, but in response to the generic question:
It's certainly possible, but it's quite unlikely. Ubuntu (like most Linux distros) defaults to file system formats that Windows doesn't natively support, such as EXT4. There exist EXT drivers for NT (Windows kernel), but unless you installed one, it's extremely unlikely that any malware even realized there was another OS installed, much less included the file system drivers needed to modify it.
The most likely exception for dual-boot systems would be some sort of "bootkit", which is malware that infects the boot sectors / UEFI system partition of your disk (where the bootloader is normally located). Such code runs before the OS (indeed, before the "real" bootloader) starts, and thus has full control over the hardware. This allows it to do any number of things, such as start a malicious hypervisor and "lift" the real OS into a VM, or overwrite integrity checks in the bootloader / kernel and replace important system files with malicious copies.
Of course, the first of those would have to be uncommonly complex malware both to do this undetected and to carry out any malicious activities against such "lifted" OSes (although simply using your machine to undetectably run the attacker's own software would be easier, just another thing running on the hypervisor, and it could "phone home" for additional actions to take / allow remote access), and most things the malware would want to do to your system would be OS-specific (though loading file system drivers to browse your volumes would be easy in a technical sense). The second approach is likely simpler - though it risks breaking when the system gets updated - but again assumes the malware has support for the file systems in question. A bootkit embedded in Windows code is almost certainly going to have NTFS, FAT32, and maybe EXFAT support - the common Windows file systems - but is less likely to support Linux file systems (though it could, especially if it's built from Linux code to begin with, and if it detects signs that you run Linux - like a GRUB bootloader - it might be smart enough to specifically fetch the needed drivers).
However, bootkits are rare in general, both because they're more complicated to write than most malware and because many systems now come with protections against them. "Secure Boot" prevents loading boot code not signed with a trusted certificate's private key (although it's often disabled on dual-boot systems, as that can be easier than signing and trusting the new bootloader). They're also usually detectable when booting from removable media... unless they went even lower than the disk, and instead infected the firmware. That's definitely a risk, but it's even less common (AFAIK) than classic bootkits. Modern motherboards should only allow trusted firmware to be installed / run (although I would be quite unsurprised if there were some boards without this protection, or with holes in it), and the malware would need to be more specific to the hardware than is typical for malware.
In theory malware could be installed in other devices, such hard disk / SSD firmware, but I'm not aware of any examples of such code in the wild (it would again be hardware-specific, and unlike the system firmware, most device firmware isn't even designed to be user-updatable).


'New vintage' Nokias privacy/anonymity I have read that devices such as the old Nokia 8310 are used because the privacy/anonymity they provide (for instance for drug dealers)
I have tried to find out if the 'new' vanilla Nokias, such as Nokia 105, provide the same level of privacy. I have found that they don't have GPS and use Symbian, but haven't found any actual comparison between them.
Do these 'revived' vanilla Nokias still provide the same level of privacy as the true old ones?

It depends on what kind of privacy you are talking about.
If it's about the carrier/government knowing all places you go, when you are moving, when you are not, where you live, whom you call, whom you text, who calls you, it does not change much: triangulation will show your coarse position on a modern smartphone and a dumb cellphone the same way, and the call/text metadata is still available for the carrier and government, and this data does not depend on the phone.
But if for privacy you mean all the trackers embedded on Android or iOS apps, there's a difference. Those vintage phones have very simple operational systems, no GPS, no WIFI, no cameras, no bluetooth, usually cannot multi-task, cannot run Java applications, cannot load applications larger than a couple kB, and usually cannot load anything running javascript, or even HTML. So email tracking usually won't work, tracking apps aren't easily available, and current exploits won't work. Some of them won't even have a SIM card, so that path isn't available for exploit either.
It's almost like running MS-DOS today: you cannot get a tracker written on .NET to run. You cannot exploit a drive-by download vulnerability on it. You cannot exploit SAMBA on it. Those vectors won't work because the attack surface lacks a lot of components.
It's better? Sure!
It's perfect? No. You can still be tracked, in a more limited fashion, but can be tracked.


SFTP or FTP through VPN? I'm struggling to find out whether or not I should set up SFTP since I already connect to the internet using a secure VPN.

Is the security using FTP through a VPN (using OpenVPN, more specifically https://mullvad.net) as secure as SFTP?

SFTP (as in, file transfer over an SSH tunnel) provides end-to-end encryption, plus verification of the server's identity.  FTP over VPN provides encryption from your computer to the VPN endpoint, and no verification of the server's identity.

If the VPN endpoint is the same computer as the FTP server, then FTP over VPN is as secure as SFTP.  In any other circumstance, SFTP is more secure.


How can I choose a good API/Security Provider to implement AES on a production system? We know we shouldn't roll our own crypto, apparently that includes writing our own implementations of the language included cryptography extensions. So that begs the question, how do we find a suitable security provider or API should we use and why?

In the case of Java 8, I've come across Apache Commons, OWASP ESAPI (Which the very author of seems to recommend against using) and Bouncy Castle. While I don't want to limit the scope of the question to these three providers, I believe these could be useful examples to compare what to look for in a security API/provider since they seem to be somewhat popular.

What aspects should one focus on when searching for a suitable implementation of a crypto API? Where can one find more information on the subject? And how can one avoid bad or malfunctioning crypto APIs?

Getting Started

First, before you dive into the world of Crypto-Libraries, you need to understand the abilities of your development team. Do you have developers or do you have power-users with sudo development knowledge?

This is important because it likely determines the ability for a person understand an API's purpose, vs implementing it and crossing your fingers.

Crypto-Modules

If you want the Shortest Answer, find one that is FIPS PUB 140-2 compliant. If you not familiar, its basically the government standard for Crypto-modules. I'd minimally suggest looking at the Wiki and get a general understanding of the standard.

Most Crypto Libraries worth there implementation are at least Level 1 Certificated. A list of them can be found here.

High Level vs Low Level Interfaces

When people say don't role your own Cryptography, they tend to mean, don't reinvent the proverbial wheel. I.E Don't build your own libraries based on what you think the algorithms should be. (Stick with FIPS)Since we established that your not going to do this (right?) than the question is how do you best use these tools.

Some Libraries give you an interface for the low level functions, like Java's Cryptography Extensions (JCE). These libraries have all the algorithms and and Object needed for Cryptography, but will probably require a developer to abstract away those function in most cases.

Some libraries offer a high level interface, such as OpenSSL, which abstracts away a lot of low level work and you just make the calls. Many may argue that you should uses this, however, as many developers experienced by using OpenSSL libraries willy-nilly, if you don't know what your using at the Highest level, you can end up digging to find out if your vulnerable.

There is also Cryptography As A Service. Personally, I don't have much knowledge on them. They usually offer an API (such as REST) for you to send your Cryptographic needs too.


Suggested Steganography Program? I would like to try a Steganograghy program - know of one? How 'heavy' can it be:

1- Can I run the plaintext through a SHA-2 hash, THEN....
2- Encrypt the digest with my private key (Digital Signature) and attach it to the plaintext, THEN...
3- Encrptyt the plaintext + encryped digest (symetrically) with AES, THEN.......
4- Encryt the symetric key with my private (or recipients public) key (RSA) AND embed it with the ciphertext in the media file

There may be some redundant encrypting going on here too?

I would say, why not just encrypt & sign using GPG as usual... then put this into your steganography program of choice.  That is... unless you want some security by obscurity... but then again, you're already doing some of this by using steganography.

There are many steganography tools available, and many different file formats to choose for embedding your message (ie: png, jpeg, tiff, mp3, avi, mpeg).  A list of steganography tools can be found here.  The size of the message, or how 'heavy' it can be depends highly on what tool you are using, and the size of the carrier file.

You can hide a lot more data in a larger file without it degrading the quality, or becoming noticeable.

For some simple open source steganography tools, perhaps try out OpenStego or StegHide

EDIT: Do note that depending on the context of the message transmission, a certain file type or a large file may indeed be very noticeable.  For example, on a network where small images and HTML pages are predominantly transferred, perhaps a large DVD .vob would stick out like a sore thumb.  The purpose of steganography is to conceal the message so it's completely undetectable.  Context is everything here.


Verifying NLA support on Remote Desktop What is the best way to verify if an MSRDP server has NLA enabled or not?

My understand is that if enabled, it will not show a graphical screen when trying to connect, but ask for credentials first.

Would one way to verify this be to use the rdesktop utility and if a GUI screen is shown for login, note that NLA is not enabled?

rdp-sec-check is a Perl script to enumerate the different security settings of an remote desktop service

The following potential security issues are flagged if present:

The service supports Standard RDP Security.  This is known to be
vulnerable to an active Man in the Middle attack.
The service supports weak encryption (40-bit or 56-bit).
The service does not mandate Network Level Authentication (NLA).  NLA
can help to prevent certain types of Denial of Service attack.
The service supports FIPS encryption but doesn’t mandate it – may
only be interesting for jurisdictions where FIPS is required


how may I see if a .iso file is original (to avoid security troubles)? I bought a license key for Windows Enterprise on eBay.
The seller sent me a .iso file (Windows Enterprise cannot be downloaded from the Microsoft website directly).
He told me he sent a version of Windows Pro upgradable to Enterprise, so the license I bought may be used to upgrade this version of Windows Pro to enterprise once Windows pro is installed.

This sounds a bit odd to me, I wonder if I should worry about the .iso file he sent and which are the risks involved in installing a non-original operative system (i.e.: might someone take control of my pc?)
I guess it is an older version of Windows he downloaded from the Microsoft site himself (which is no longer available due to commercial reasons) but what if it's an hacked version?

Is there any trick to see if the build of Windows I installed from someone's .iso file is original?

Is enough to go under Control Panel\All Control Panel Items\System and check for last tab: Windows activation.

Here you should see if your windows is activated, the product ID/key and if your Microsoft software is genuine.

LE: My bad, now I see below asking also about trust and checking if any malware. In this case only a md5/hash compare between your .iso and the original one should help


MySQL AES Encryption - Is it good idea to store 3rd Party Auth Tokens using AES Encryption? I need some advice on MySQL AES Encryption. I'm developing an application which connects to various 3rd-Party APIs and retrieves the Access Tokens for the application users. These Access Tokens are long-lived and will be used in offline mode for performing a bunch of tasks. My Question is that since Access Tokens have much privileges on a user's account, is it a good idea to store them using AES or some similar Encryption ? Is there any other better approach to secure these tokens?

Yes, it's a wise idea, but I'd recommend doing encryption in the application code and not in MySQL, because AES functions in MySQL are using ECB block mode, which is discouraged from being used in cryptographic systems.

Read more at:
https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_.28ECB.29

To increase security, you could perform encryption/decryption in a HSM (hardware security module) or create a poor man's version of it with software. That way, the cryptographic material (e.g., master key) is more difficult to access.


Reasonable (BruteForce) Attempts/Second Estimate? I've read various articles on password strength and passwords vs pass phrases (including the one from XKCD and its thread here), but most of those articles seem to be focused on online passwords, and make claims like passwords only needing to be safe for 70 days (until you change them) and usually assume some form of limitation, like network latencies, etc.

My question is, what is a reasonable estimate for password-guesses per second for disk encryption systems (like Truecrypt)? The only true limitation here is the number of CPUs available to the attacker (since cracking attempts can be easily parallelized).

Even something as high as 10^12 guesses/second seems like a low estimate, when considering that at 1 guesses/clock-tick, with 1GHz-CPUs, that only means 1000 CPUs working in parallel.

How much do the key-derivation schemes built into disk encryption software (like Truecrypt's application of SHA/Whirlpool) really help here? By how much can they realistically lower the guesses/clock-tick factor?

The problem with XKCD's scheme, I'm afraid, is that in order to get some 30ish years (I guess that's a reasonable estimate for the statute of limitations, for most legal matters, in most countries) of security out of it, you'll need 7 words .. and remembering all of them in the correct order isn't really that much easier than some 16-character obscure combination

This answer is just to add some other way to think about the question: if no flaw is found in symetric encription (i.e., in the algorithm you choose, like sha/whirlpool, or any other), there are physical limits on how far you can go to compute a brute-force attack over a 128 bits (16 character) password (or key).

Take a look at wikipedia to see how much energy it would require to compute such key space, and to verify that there's not enought energy available to do so.


How could Craig Wright obtain Satoshi Nakamoto's private key? Some of the earliest Bitcoin transactions were signed with a private key most people collectively believe belonged to Satoshi Nakamoto.  However, many publications propose Craig Wright may have obtained the private key from the real Nakamoto, then embarked on an elaborate hoax to be an impostor to Nakamoto.

What are the most likely ways Craig Wright could have obtained Nakamoto's private key, necessary to carry out this hoax?

Edit
Apparently Bitcoin Chief Scientist Gavin Adresen is backtracking on his assertion that Mr Write demonstrated he is in possession of private keys owned by Nakamoto.  So the premise of the question is likely not true.

Wright did not obtain Nakamoto's private key.

What he did provide as evidence was a signature from one of the early bitcoin transactions. However, that signature is from the blockchain and can be looked up by anyone.

Wright was able to fool some people from the mainstream media who don't really understand the technical details, but the security community debunked it quite quickly. Security Researcher Dan Kaminsky tweeted on May 2nd:

  Satoshi signed a transaction in 2009. Wright copied that specific signature and tried to pass it off as new.

Also, the official Twitter account of the Bitcoin Core Project tweeted on May 2nd:

  There is currently no publicly available cryptographic proof that anyone in particular is Bitcoin's creator.

By the way, The Economist, the original news outlet who started spreading the claim, has now published a correction.

A proper proof of Nakamoto's identity would, for example, be a message reading "My real name is Craig Wright" signed with the Satoshi Nakamoto PGP key or a new bitcoin transaction from a wallet confirmed to be owned by Satoshi Nakamoto. But so far this hasn't happened.

Gavin Adresen, chief scientist at the Bitcoin Foundation, claimed to have seen such proof by Wright, but has not posted that proof publicly. Why he would make such a claim without providing any evidence whatsoever for it and expects the world to just trust his word is a mystery. Convincing people of a miracle solely by claiming very sincerely that you saw it with your own eyes might work in certain religious circles, but certainly not in the more scientifically inclined crypto community.

By the way: I am the real Satoshi Nakamoto. Prove me wrong.


How to prevent "JailBreak detection bypass" by Cydia tools such as "Flex 3" etc? For sensitive mobile apps such as banking applications, it is recommended to detect if the device is JailBroken and prevent the application from working on that device.

But there are tools such as "Flex 3" on Cydia which allow users to bypass this protection by changing the Boolean value (jailbreak status) to True or False, thereby allowing the app to run in a JailBroken device.

What possible techniques can be employed to prevent bypass of JailBreak detection techniques?

I am pretty sure there are no reliable methods to detect jail-break/root. And I would not recommend locking out users. My bank for example had me accept responsibility in case my account gets hacked as a result of having rooted device and that is IMO the reasonable thing to do. Trying to stop users from doing what they want to do is neither nice, nor will it ever work, as they will find ways around it.

Also consider this, having jail-broken iPhone is similar to having Unknown-Sources enabled on an android and while it is less secure, you would not block such users on Android.


Should I use Windows' Cryptographic Service Provider to generate RSA keys? If I want to generate strong high quality RSA keys, is there any reason not to use Microsoft's built-in cryptography system?  Or should I use something open source like OpenSSL or Bouncy Castle?

I'm not necessarily afraid of backdoors, but I'm wondering whether I can trust the process of finding quality primes.  I don't want to find out in a year that all the CSP generated RSA parameters had a flaw and the primes are following a simple pattern.  The successful GCD attack on one in every 200 out of thousands of publicly available RSA keys made me wonder.

The generation is a once and done issue, so I'm happy to go the extra mile generating the keys if it's any more secure.

First if you're considering creating your own cryptography from the ground up, I sugguest reading the following post since there are many things that need to be considered before just using a PKI/RSA:

  Lessons learned and misconceptions regarding encryption and cryptology

The benefit of using MSFT's crypto system is that the ciphers are covered by MSFT's warranty and have been analyzed by many people.  You may want to ask in Crypto.SE if the MSFT implementation is vulnerable GCD attack

MSFT's implementation also allows for a FIPS only mode that is controlled by GPO.  Using Bouncy Castle ignores this restriction and may cause issues for deployments if operating in a FIPS environment.

The good thing about Bouncy Castle is that it offers a higher-level implementation that covers key formats, PGP, and more.

One last thing to note; RijndaelManaged and AesManaged classes can both be used to generate RSA Keys, however they are not interchangeable.  They are two different implementations of the Rijndael algorithm.  For more information see this answer


What is the responsible thing to do when I care about a vulnerability more than the team behind the system? I've encountered a security vulnerability in a website. The website is that of a leading brand in it's industry. There are user accounts etc. and this website is very popular.

I've contact multiple people from their development/IT team, but no reply (they've read the message).

Do I leave it as it is? Knowing that the public are potentially at risk by using a site that is less than secure?

Is this what filing a CVS/CVE issue is for? Or does that not fit into this at all and I should leave things as they are?

There is a couple of things you can do.

1) Do nothing

2) Tell the world

I would go with 1) - Reason for this is, you can get into serious trouble if you tell the world (Depending on what laws you have broken to get the knowledge, and you probably have broken some laws even if you think you have not), and still could just by telling the company, I have and a lot of others have too.

Simply not worth it most of the time.


Business located in USA does it need to be PCI and SCA compliant? The business is located in the US. But:

Has European customers who put a transaction via a custom-built
shopping cart Sells via tradeshow in Europe or Asia in person Could
Customers send credit cards via phone

Question: is the business supposed to be both PCI and SCA compliant (Europe)

In most jurisdictions, PCI is not law, it is an industry-enforced security standard. If you take card payments from any of the payment card systems (which is essentially all of the major credit card systems, including but not limited to Visa, MasterCard, American Express, Discover and JCB), you have to be PCI compliant. It does not matter where you or your customer resides, it does not matter what kind of shop you are, and it doesn't matter how you capture the card detail, if you take cards, you are in scope of PCI compliance.

If you are not PCI compliant and your merchant account/payment terminal is found to be involved in a chargeback or fraud, you'll be liable for the chargeback/fraud. You'll also be in breach of contract with your acquiring bank/payment processor, and your bank may impose fines/penalties on your merchant accounts, or impose higher fees on you, or they may terminate your ability to take card payments. They may also put you in blacklist with other banks, which can make it difficult/impossible for you or your business to get a merchant account with any other banks.

In some countries, PCI compliance is also legally imposed, in which case the government or private citizens may also file additional criminal or civil lawsuits against you.

PCI compliance have different levels. If you're a small merchant with low volume of transaction and you used the service of a compliant payment processor, you may able to use self assessment questionnaire (SAQ) to evaluate your PCI compliance which can significantly reduce the burden of compliance. You can complete these questionnaires yourself without external auditors, you'll still be responsible for completing it correctly. If you're a higher volume merchant, you'll need to take higher level of compliance, and this will usually involve a PCI auditor.

I don't know what you meant by SCA, but from a quick Google search, it doesn't seem to be a security related, and therefore off topic here.


Client misunderstanding nmap My client wants their public facing IP addresses to be secure, but thinks that running nmap port scans will draw attention from hackers.

To settle this once and for all, what do you say?

I say put up an IDS and/or enable firewall logging capable of detecting port scans.

Wait for one to happen naturally, and then show the client the evidence that they're already being port-scanned.

Alternately, you can simply schedule some downtime, unplug the WAN interface from the Internet, plug it into a standalone local router that pretends to be the Internet, and run the portscan; physically invisible from the Internet.


Network abnormally slow during night hours My network recently the last week as become abnormally slow around 11 pm.  Very slow buffering youtube videos during all hours.  Ive recently purchased the new router about two months ago but not until the other day has it become very slow.  I have 1 port open to allow myself connection to a server but I believe i have a strong password.  How do I go about figuring out what is wrong.  I feel it is a security problem.
  I use wpa for my wifi.
  Like I said i run a server so a port is open.
  Should i use traceroute? If so how?

Change the password of your AP
Read the logs of your IP to see who's authenticated at those periods in time
Check your servers logs (is it generating traffic maybe?)
use tshark/wireshark on your server to analyze, use graphing tools like munin and cacti to determine the amount of traffic
If all of the above don't work check with your ISP


Fake secured WiFi network to harvest password I'm not finding a lot of information on this topic although it seems so simple, so I assume it isn't possible, but I was wondering if it is possible or not to create a fake acces point that looks like it's password-secured with the same SSID as the targeted AP, but without a real password. Instead, the fake AP would allow the user to connect, no matter the password entered, but log the password the user or device has entered in order to obtain the password of the target-AP. Is this possible and if not, why not?

If you come at this from a different angle then yes.

Effectively what you are asking is "can I fool the user into typing there real Wifi AP password into a prompt that you control."

Yes this is possible in various ways. In previous pen and social engineering tests I have got the victim onto a website I control then conditionally display various prompts that look and act exactly like system prompts.

Some users fall for it others don't.

To harvest Wifi creds you can display a wifi re-prompt for the password, many will just input there PW without thinking. The more convincing the prompt the higher the success. A targeted attack will first have the SSID to correctly set the one displayed in the prompt. This can be combined with a persistent de-auth beacon to add a convincer that there wifi has dropped out.

Time all of the above right, with the correct info on the target and this attack vector is very successful.


Verifing the first link in the apt-get verification chain I'm asking myself the following question lately: How do you really know, that you've installed the package you ordered under debian/ubuntu with the use of APT?

I think I understood the basics of the verification chain -- except the very first link.

So when I tell apt to install a package, it downloads the Release file from the repository-mirror specified in sources.list. That file is signed by the repository maintainers secret key. Apt verifies the signature with the local trusted keys (apt-key list).
If everything is okay, apt uses the checksums in the "Release" file to verify further Packages files and the checksums in them to verify that the .deb files I'm installing have not been tampered with.

What I don't get at the moment is how do I verify that I've got a good set of trusted keys to verify the signature of the "release" file (ie. the first link in the chain).

In the common case I receive the keys via the debian-archive-keyring packages or its ubuntu equivalent. But since my keyring is possibly empty at the beginning before installing it, i can't verify this package effectively. There has to be another option.

For debian, I have found this nice webpage https://ftp-master.debian.org/keys.html which I can access via HTTPS that lists all valid repository-maintainer keys. So I can use apt-key to verify the fingerprints of my local keys with those of the website. Seems good to me. But I can't find something similar for ubuntu. And this seems not to be the 'popular' method for verifying the keyring.

They even have this sentence on the page:

  Please note that the details here are for information only, you should not rely on them and use other ways to verify them.

Via the Web of Trust. I've read some things about it, but I don't now if I'm convinced.
eg.: When I search for the current debian-stable key on pgp.mit.edu I see that the key is signed by four different keys. But I know none of them. To be fair, three of those four are heavily signed by a lot of people. But I don't know any of them either.

https://pgp.mit.edu/pks/lookup?op=vindex&search=0xCBF8D6FD518E17E1

Wouldn't it be better if every 'repository creator' (like debian, ubuntu) had an easily and secure accessible https page where you can easily compare your local key to, instead of digging through the WOT in order to hopefully find a convincing link to the debian project?

Bonus question: Is there a possibility to 'verify', that a package is the result of a build process from a specific sourcecode you can look at?

So far I think, that the repository maintainer who signs the release file 'promises' (don't know a better word) me this with his signature. Is that correct?

The Debian keyring is shipped with the distribution installer, so you get bootstrapped your repository trust by the installation medium. This also applies to (probably) all other Linux distributions relying on OpenPGP/GnuPG for verification in package managers.

If you don't trust your installation medium, you should verify it by any of the means provided (fetching it from a trusted source, comparing with others, checking the OpenPGP signatures issued, ...).

If you want to construct a trust path into the Debian keyring manually, find some Debian developers and verify their identity/sign their keys. Usually, they will gladly meet with you if asked nicely.

  Wouldn't it be better if every 'repository creator' (like debian, ubuntu) had an easily and secure accessible https page where you can easily compare your local key to, instead of digging through the WOT in order to hopefully find a convincing link to the debian project?

There are people around that do not trust HTTPs and the hierarchical trust system for some (valid) reasons (but this is far beyond this answer, and already discussed lots of times) and prefer to rely on the decentralized OpenPGP web of trust, especially for bootstrapping trust.

In the end verification boils down to finding a trusted CD image source, anyway.

  But I know none of them. To be fair, three of those four are heavily signed by a lot of people. But I don't know any of them either.

Basically, you'd have to start your trust network somewhere (by meeting with others already connected to the web of trust, verifying their ID and signing their key), and go on extending your personal view on the web of trust by recursively selecting people you want to trust until reaching the Debian signing keys. For sure, this is not a trivial task.

Deciding whether to trust an HTTPs page suffers the same issues: again and again, there are reports of hacked and broken certification authorities. Do you know all of those hundreds of CAs, and do you trust each of them? They're all trusted and can issue valid Debian certificates!

  Bonus question: Is there a possibility to 'verify', that a package is the result of a build process from a specific sourcecode you can look at?

Debian promises you by signing the packages that it was built using the release file from respective Debian sources. The packages are build on build servers and signed by special keys, this is nothing the individual Debian developers do manually.


How do I program a function to generate a secure Block Cipher Encryption-Key? I am currently studying the most widely known encryption algorithms and methodologies. For practice purposes, I want to implement everything from ECB to RSA as some kind of a C crypto library. How would I generate a secure key in a C program (I know, that writing a crypto library on my own is not secure at all but I just want to learn basic principles from key generating to key exchanging to encryption mechanisms).
How could I approach the problem of implementing an algorithm for a secure key generation? Which main issues need to be considered to reach an at least mediocre key security?

Most block ciphers want a totally random string of bytes as the key. So read the key from /dev/random dd if=/dev/urandom  count=1 bs=256 (or whatever cryptographic RNG you have easy access to).

For ciphers other than block ciphers, for example RSA or ECDHE (on curves other than ed25519), keys are not just random bytes and in fact have a lot of mathematical structure inside them. These algorithms have complicated key generation routines, so you'll need to go find the specification for the algorithm you're trying to implement. These keygen algorithms have been tested by many mathematicians over the years, and as long as you follow them exactly, you should get a secure key.

For example, Wikipedia describes the general RSA keygen algorithm here, but I'm struggling to find an original source technical spec. Maybe that's because what I want is the PKCS#1 spec, which is pay-walled by the RSA company?

https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Key_generation


Is there a way to protect against mdk3 attacks? I've got a home network using Wi-Fi.
Someone is using mdk3 and disconnects users from the Access Point, whether they are Android or Windows Phone or Windows 10 desktop or Apple computers.

Is there a way to protect against attacks?
Is there a way to know the attacker?

Is there a way to protect against attacks?

Sadly you cannot stop an attacker from sending deauthentication packets.

But to minimize damage make sure you use WPA2 with a long good password. An attacker will usually send deauthentication packets so he can capture a handshake and brute force it to gain the WiFi password. By having a hard to crack password you are making the attack much harder and longer and in some cases almost impossible.

  Is there a way to know attacker ?

As said in the comments, the attacker is probably close by so walk around a little and find him.

You can read a little more about the subject in this answer.


How to best set up public WiFi without giving access to the rest of my network? For reference, this is just for my home network. Anyway, I have quite a few of my neighbors ask me to share my internet with them. I'd really like to eliminate this "here's the password" portion though by just making my network publicly accessible.

Now my problems:

I don't want for them to take all my bandwidth
I don't want them to be able to access the wired computers on my home network
I want to avoid double-NAT if possible

My setup is pretty simple at the moment. I have a wireless router that I've disabled DHCP on and have effectively made into a wireless-wired bridge. My actual router is a computer running OpenBSD(4.7 but being upgraded soon) with pf. My DSL modem is connected to my router in bridge mode over PPPoE

I don't have a whole ton of network knowledge, but I want to learn more and I figure this should be a good learning project.

What would be the best way to do this?

I know how to do this.. I just don't know how to do this with pf.

Forget the wireless portion, what we want to do is make two LAN's that are isolated from each other. You can then add the wireless access point to the one of the LAN's.
Obviously, for 2 LAN's, you'll need 3 ethernet ports on your OpenBSD box.
See the following for the types of rules you need to make.
http://wiki.openwrt.org/doc/recipes/guest-wlan

Now, I don't know pf.. but, you basically need to..-

Forward everything from LAN1 and LAN2 to WAN using NAT.
Firewall openbsd from LAN2, and leave it open for LAN1.
Open various ports for dhcp and dns.


Are computers on same network as honeypot safe? If a computer is setup as a honeypot and is on the same LAN with other computers, could other computers be attacked?

My thought is that if an attacker infects a honeypot with a worm, this worm would spread over the LAN to other computers. Am i right?

I would most certainly segment any would-be honeypots from the rest of your network. Truth be told I would be very careful about implementing something like this unless you know exactly what you're doing.

If you're planning on trying something like this I would recommend (at a minimum)

Create a different subnet / VLAN and put the honeypot on that.
Ensure proper firewall rules are in place that prevent forwarding of any traffic from the honepot network (in essence, a DMZ) to your primary network.
Create firewall rules that prevent administration of your networking device from that subnet
Use strong passwords on the rest of your network devices
Regularly monitor the honeypot and the rest of your network devices and monitor for compromise.


How to perform custom response grep/extract in Burp Intruder? Burp Intruder supports response grep by regexp, and shows every match in separate column in result table.

Is it possible to use custom response processor, written in any language (Python preferred) to generate a extra column value for each request?

For example, for each request I need:

Access to body
Count "words"
Return integer value and display it in extra column "Words" in results table

I don't think there's an easy way to do this. Might be worth asking Portswigger, as it seems a reasonable request.

As a complete hack:

Create and register an IHttpListener instance.
When you see responses that relate to intruder, parse the response, count the words, then modify the response to include something easy to grep such as:

<!-- WORDS: 1234 -->
Configure Intruder to grep for WORDS: and extract the relevant value.


Is there any defense against this kind of attacks? (key comparison attack, or something) is there any defense against this kind of attack?

https://youtu.be/7U-RbOKanYs?t=974

I know someone who uses a password encryption hashing that generates the same length of keys as in this video and it makes me worried that those keys are equally vulnerable? (I don't know what kind of encryption hashing is used, nor do I want to know)

*Does it help to increase the length of the encrypted hashed keys?*

As I understand the attack:

The attacker have somehow got a hold of the encrypted hashed keys, and also downloaded a big database of already cracked passwords & also downloaded some (or made own) rules for switching letters (a "mutator").

Then the attacker takes a solved password, mutates the password in all kinds of ways, then encrypts hashes the mutated passwords & simply compare the newly encrypted hashed keys with the encrypted hashed keys in the database, and if the encrypted hashed gibberish is the same then the attacker knows that the newly encrypted hashed key is the same as that entry in the database.

(PS. what's the name of this type of attack?)

First things first: passwords are not (or at least, never should be) encrypted. They are hashed, a one-way transformation that takes an arbitrary input of arbitrary length and produces a constant-length (for any given hash algorithm), deterministic (the same input always produces the same output), and high-entropy (hard to distinguish from random) digest (also simply called a hash). For cryptographically-secure hash functions, there is no way to tell, given a digest, what input string produced it (and of course, there may be an infinite number of possible inputs that would produce it, since there are infinitely many possible inputs but "only" a limited number - such as 2^256, for 256-bit hash functions - possible outputs). In other words, you cannot reverse a hash function. Additionally, any changes to the input of a secure hash function, be they large or just a single bit-flip, generally produce a dramatic change in the digest.

Due to that, the standard attack on password hashing has long been to hash a large set of candidate passwords with the same algorithm, and check if any of the outputs match the digests in the dumped collection. Originally, this could be done with large, pre-computed lookup tables (called "rainbow tables") where a password, if it was present in the rainbow table, could be identified from its hash easily (simply search the table for the same digest). To protect against that, password hashing algorithms began to incorporate a "salt", which is a random string of bytes that are generated uniquely for each user, and are combined with the user's password when hashing. This makes rainbow tables useless unless the attacker already knows the salt of the user they want to crack, and even if they do they can only crack that specific user's password and have to generate an entirely new set of hashes for each other password. It also means to users who use the same password will have different digests, as their salts will be different.

However, even salted passwords can fall prey to a simple brute-force attack, because secure hash functions are generally optimized for performance (many of the places they are used, such as HTTPS traffic, require that they be computationally inexpensive). Chips that are optimized for performing the same operations on many distinct pieces of data in parallel - which is exactly what GPUs (graphics processing units) do - can brute-force an enormous number of hashes in a very short time (high-end GPUs can compute billions of hashes per second, for some of the common hash functions). Very, very few users are going to select a password so rare it's not one of the first few billion attempted, so such an approach can crack most passwords in a few seconds, for the cost of a few hundred dollars of graphics card. To defeat this, people started using slow hash functions for password hashing. The simplest way to make a slow hash is to take a fast hash, feed its output (and the salt) back into itself, and do that a few thousand more times; this is the basis of the PBKDF2 function, and it can slow down password brute-forcing attempts by a few orders of magnitude. Over time, more advanced password hashing algorithms have been developed, which resist not only GPUs but even customized chips (FPGAs or ASICs) designed to do nothing but brute-force passwords as fast as possible. No resistance is perfect, of course - the server still has to be able to hash your password when you log in, which puts a limit on how expensive the hash function can be made - but it can be literally millions of times slower to brute-force passwords protected by a proper password hashing algorithm (such as scrypt or argon2) than by a single-iteration fast hash (such as SHA-256). In other words, trying "the first few billion possible passwords" for each user goes from taking 1 second to taking a few weeks. Getting even a single password becomes expensive; breaking thousands of them becomes nigh-impossible.

Now, to answer your questions:

Is there any defense against this kind of attack?
Aside from what I mentioned above - use salt, use a slow hash function, and make it as expensive as possible to brute-force passwords - there's no way to truly prevent brute-force attacks. However, you can make brute-force attacks take so long to succeed that they are de facto impossible, if you can get your users to use passwords that the brute-forcing tool won't try within a reasonable timeframe. Simple permutations and common substitutions, like "password" to "Pa$sW0Rd", are easy for programs to try and therefore add little security, even though they'll get past the foolish "complexity" requirements many sites have. Using long passwords, generated with an element of genuine randomness, works much better. For example, a passphrase generation algorithm such as Diceware (online generator) can produce passphrases that aren't too hard to remember but are extremely strong. With reasonable length choices and generous estimates of cracking speed and technological progress, Diceware-style passphrases should be safe for at least a few decades (and potentially for centuries) even against an attacker who is doing nothing but try to crack that one passphrase using constantly-improving cutting-edge technology.

Does it help to increase the length of the encrypted keys?
Not really. Leaving aside that they aren't "encrypted" at all, the strength of a password hashing function has very little to do with the length of its digest. Obviously you should not use extremely short digests, because then you have a high risk of collisions (two unrelated passwords that hash to the same thing, and either one would be accepted for that user), but all secure hash algorithms have a digest of at least 128 bits, which is plenty to avoid that particular risk. Longer digests do technically make the comparison step of the brute-forcing attack take longer, but the difference is irrelevant next to the time it takes to compute a slow password hash in the first place.


Managing a team of IDS experts; how would you organize your team? Suppose you are managing a team of Intrusion Detection Experts:

...what are the functional areas of the IDS knowledge space would you group your team into?

...how would you structure your team?

...how would you measure success?

It depends on what you want to do with that team.  Sourcefire has a few people working on the core engine, a few on the plugins, and a vulnerability research team writing rules--some of whom had no prior experience with intrusion detection; just exploit writing and reversing.

The setup I'm most familiar with, in contrast, uses a simple tiered system like many service providers.  Junior analysts monitor in realtime and review logs; and the senior analysts take care of ambiguous cases and write rules which are useful locally.


Key Encryption / Obfuscation I got a GUI Program, which loads the Logic from a webserver if the entered License Key is valid.

The actual connection string I hexed and xor'd with a secret key. (which is unfortunately static)
The Webservice itself authenticates SASLandSCRAM-SHA-1

For Clearification:

Person A doesn't want to buy a license. So he tries to reverse engineer it:

Enters Random False Key - no data from Webservice.

In my understand, the only chance to actually bruteforce the program is to crack the secret key. My thought was creating one dynamically. Besides that, what other approaches are there?

This is not a secure approach.

In order to use the connection string, the client must decrypt it. In order to decrypt it, it must have possession of the secret key, at least temporarily. During that time, a hacker can debug the program and extract the key from memory. For this reason, a global secret key should never leave your data center.

A more typical approach would be to issue a license code that is hard to guess and simply store it on the server. The caller would need to send the code along with the request to use the service, and the service would check that it is valid. If the code is found to have been compromised (e.g. shared), you can simply remove it from the server.

A less centralized approach would be to issue a license document (e.g. an XML file) and digitally sign it before providing it to the customer. That way the client or other clients could validate the license independently of the server (and of course the server can still validate it).


Strange SMS received on Android phone. Is this an exploit? Should I be concerned? I am using an Android phone. I received an SMS from an unknown number today which had the following content:

#Gege%wghatdanaipop%^
*%95bornioke:&67;
///Hackmaster&67;-&67"
//Fregbugg190&@"67"@/ ;
 :;whatsappash/@"hack:///
<#instruct~bug*omeg!#%
#%uthumb:"
?nail:/-67;bug__gegr>
;thumbnail\~>%
/:call log;&"#%
#05:32;&mondaybug&"
/:thumbnail;again|\]
#10:08;mondaybug &"
/:@thumbnail!\*;
#02:06;&fridaybug&"
/:#%allelements((crashed?)
;)&@(
-/7890@"$>
;:/endallow/thumbnails)&@"
/),.bugedit&@"
\{{Elementscrashed}}#%
"(<altedit)>•)*"
:@endbug:;"
:/&@"all*^^#
/)@allcrack<~|_]}}
-//userdemoadd:)&@"
~<>%^
\{{ensall<>%^*

  (gist version)

It looks very weird. Any idea what it is? I am curious as I was afraid that it can lead to some bug in applications which read SMS? Is it possible?

Judging from the contents in this SMS Message, looking at lines as:

///Hackmaster&67;-&67"
//Fregbugg190&@"67"@/ ;

You'll notice these are all random characters, especially this Hackmaster line, which of course paired with these random characters could arouse suspicion around non-tech savvy people.

As mentioned in a comment before by others, it indeed looks like someone trying to troll/prank you, your suspicion isn't a bad thing however, referring back to the case of the Apple iMessage Glitch.

Long story short, I shouldn't worry too much about this specific text ;)


Can a firewall blocking a guest virtual machine secure the host? I have searched up whether a host is safe from its guest, and generally, it is said that, aside from vendor security flaws, a guest that is infected can infect the host over a shared network.

So, what if a firewall is set up to block all traffic from the guest to the host?  You don't need to be on the network to control the guest, as far as I know. So... since the guest can't access the host over the network, is the host safe?

There are two main ways by which a corrupted/evil guest VM may hurt its host:

By talking to the host over the network; this is similar to having an evil machine on the same LAN as the host, although there can be details, depending on how networking works in your particular VM.
By "escaping" the virtualization layer, a successful escape granting (for instance) read/write access to the VM process on the host, or hypervisor hijack, or anything of the same level.

The second way is what "vendor security flaws" are about. If the VM implementation is secure, then it ought to prevent such occurrences.

Firewalls act on the network side of things, so that is relevant for the first way only. However, if you are working with potentially hostile VM, then you must, indeed, do something about network-based attacks, and that may involve firewalls.

In a typical VM, the host provides network services to the guest. These services are configurable. For instance, if you look at what Virtualbox provides, then the guest may:

have no network at all (the VM engine does not provide the guest with a virtual network interface);
have a network interface linked with other VM under the same engine, but separate from the actual Internet;
have a network interface linked with other VM and with the host, but otherwise separate from the Internet;
have a network interface that the host sees, and for which the host provides NAT service (but this does not correspond to an actual ethernet card on the host).
have a bridged network interface, allowing the VM to send and receive ethernet frames as if it was another physical machine connected to the LAN.

In the first two cases, the VM cannot talk to the host and that's final. In the cases 3 and 5, the VM can talk to the host through what the host sees as a network card (a new, software-based card in case 3; its actual physical card in case 5). In case 4, the host OS does not see the packets from the guest as packets; they are array of bytes in the VM engine process, but that process translates them as connections to other machines, which may be the host itself.

Firewalls have nothing to do with cases 1 and 2. A firewall may work with cases 3 and 5, albeit on distinct ethernet interfaces; beware that in those cases the hostile guest sends arbitrary ethernet frames, which may not necessarily show up on the link as relevant to the IP address you believe the guest should use. You should handle these situations in the same way as you would for an hostile machine linked to the LAN -- if you prefer, assume that your host is on an open WiFi in a fast food restaurant. For case 4, firewalls are irrelevant, because any connection to either the host or any other machine will appear to the host OS to come from the VM engine process itself.

The above is about what happens with Virtualbox; details may vary with other virtualization solutions.


Is the Cisco vulnerability specific to Cisco or is it something in some commonly used library? I am referring to the vulnerability reported here:

Cisco secuirty advisory on "Cisco Adaptive Security Appliance Remote Code Execution and Denial of Service Vulnerability"
CIS adviory on the same vulnerability

Is this in some proprietary code specific to Cisco, or is it something in some underlying SSL/VPN library which may be used by other products also? If I am running some SSL-VPN product from a non-Cisco vendor should I be worried about this vulnerability?

CVE-2018-0101 states:

  A vulnerability in the Secure Sockets Layer (SSL) VPN functionality of the Cisco Adaptive Security Appliance (ASA) Software could allow an unauthenticated, remote attacker to cause a reload of the affected system or to remotely execute code.

No mentioning of a vulnerability in a generic library whatsoever. Also, looking at the list of affected products/models on that CVE, I don't see any equipment which is running some sort of Linux under the hood to my knowledge.


Using sqlmap to find password hashes I'm learning SQL-injection (and SQL in the first place) by playing a CTF. I'm using sqlmap and have for my target IP so far found:

Uses: MySQL, PHP

2 databases:

information_schema
users

1 table in users database:

user

if I dump the user table in the users database I get:

+------------------------------+----------+
| name                         | username |
+------------------------------+----------+
| YouWillNeverCrakThisPassword | nochance |
| Jack Bob                     | jack     |
| Bill Sims                    | bill     |
| Bob Browne                   | Bob      |
+------------------------------+----------+

But there isn't any password hashes for me to try and crack. In the tutorial I've been following this is where the hashes were.

Any idea where the password hashes might be? Do they have to be somewhere? I don't know much about the schema, but I didn't really see anything in there.

The actual user table (Note: singular) you are looking for is in the mysql db not the users db (Note: plural). The users database you are referring to is probably something you (or DVWA, or whatever you're practicing with created). If you want the MYSQL users (and hashes), you'll need to get to the database engine's configuration tables, specifically: user.

REFERENCE

https://dev.mysql.com/doc/refman/5.5/en/password-hashing.html


What steps can be taken to secure snail mail? Alice has decided to stop using electronic communication with her friends and relatives. She believes analog media are generally more secure and private. Her friends and relatives, however, neither care about security nor want to be inconvenienced by it. Alice believes the postal service provides the most cost effective way to correspond. What steps can she take to prevent anyone but her intended recipients from reading her mail?

Alice is mistaken regarding analog media in this case. It's often overlooked, but because (by it's very nature) digital communication involves a computer at both ends, you can get the computer to do the work required for strong crypto, and so strong crypto becomes possible.

You can do secure communications over analog (typically with either one time pad or with a code) but these options require work to be done by the recipient.

For effortlessly secure communications you need strong crypto and that means computers.


OAuth access token vs session key Is there any advantage to OAuth vs cookie-based sessions (established via username/password) under the following assumptions?

There is only one legitimate client to the service
The OAuth client secret has been compromised (so valid requests can be issued by anyone)
The OAuth token and the session have the same lifetime
Both allow access to the same set of resources with the same privileges
All client-server communication under either scheme is via the same protocol (for arguments sake, HTTPS)
The client and the server are controlled by the same party

Well, it depends...

OAuth is a protocol for creating a session.   OAuth bearer tokens are transmitted by the client using the Authentication: Bearer HTTP header.   This is just a cryptographic nonce that is transmitted via an http header element,  which in effect is (almost) identical to the cookie http header element.

How does it differ?  Well, the rules for cookies are a little different than other header elements.  The cookie is maintained by the browser,  and is attached to every request for which the cookie belongs.   This is the reason why Cross-Site Request Forgery or session riding attacks work.  The browser doesn't care where the request came from,  it will attach the cookie based on the destination of the request.

OAuth Bearer tokens are a little different.  These tokens are usually managed by the client (JavaScript, Flash, or even some middleware application).  If your application uses JavaScript to manage the authentication bearer token,  then this value will not be automatically applied by the browser, and therefore can double as a CSRF token, which is neat.

However, if you are using OAuth for middleware, then CSRF doesn't come into play, so it doesn't matter where it shows up in the header.


HTTPS vs. HTTP - Is there a security reason for HTTPS for a site that only does Facebook login? Possible Duplicate:
  What are the pros and cons of site wide SSL (https)?

I am working on a site where all authentication is via facebook oauth2. I'd consider the nature of our content to be non-critical (basically news stuff). Had some discussions with client about securing site and felt that there wasn't a great reason to do right now but that Facebook and Microsoft do for all traffic (logged-in and not logged-in) whereas SO doesn't.

Not taking performance into account, would there be any security reason for us to run the site over HTTPS? I am using Rails with OmniAuth. Even though I consider the content to be non-critical, it might be easier to add at this point - perhaps user-to-user messaging (a currently unimplemented feature would require this - perhaps a reason why SO doesn't have user-to-user messaging?). Since all my authentication with Facebook is over HTTPS, would there be ANY reason that my non-HTTPS traffic with the end user would introduce a security risk to the end user?

I am asking because, when it comes to security, I'm often surprised what I don't know.

I'm using HttpOnly cookies in Rails 3.1. One thing I noticed was that I could copy out the cookie and get access even with HttpOnly in a different browser. Hmm.... not what I expected.

My general guidance to websites is to just build new sites on SSL, plain and simple. Make your life simpler.

Keep in mind that if you don't, all traffic between your users and your servers can be intercepted and manipulated. So, for example, if you were running a forum, I could intercept cookies and post to the forum as your users. Forum data is probably not the end of the world and has nothing "private" associated with it. But having users impersonating other users is just icky.

Using news as another example, as you pointed out, probably nothing sensitive. But if you have a profile feature, then others could see the news I have signed up for. And potentially manipulate it. It's a data leak sort of thing. Again, not the end of the universe, but icky.

None of these problems matter until one day you wake up and they suddenly matter (like if you get big and someone writes a FF extension to make it as simple as "follow these 3 easy steps").

Your life will be simpler if you start SSL and never look back.


If multi factor authentication is enabled, how should that affect self-service password reset? Given that security is only as secure as its weakest link, suppose I have website with additional authentication enabled in any of these ways: (example, multiple conditions may be required)

SMS/Voice HOTP message to a phone
Alternate email address
Question & Answer
HOTP soft token (Google Authenticator)
Printed out list of one time passwords
YubiKey
RSA Token
"Known/Trusted" computer (linked by an evercookie or similar)
Client Certificate
Trusted IP

Suppose a user forgets their password, most websites will allow them to reset their password if a combination of  #2, or  #3 is answered correctly.

Question

Assuming the user has a multifactor device and forgets their password, how should that affect the "forgot password" workflow?
What if the user loses the multi-factor device, or the soft token is corrupted, how should that be re-provisioned?
What if the user forgets the password, and loses the token... what should the re-provisioning workflow look like then?

Assuming the user has a multifactor device and forgets their password, how should that affect the "forgot password" workflow?

If the user is initiating password reset from an unrecognized device/browser then a second factor of authentication should be required to perform a password reset. Best practice is to require the second factor consistently across all scenarios: Normal authentication (after verifying password) or Password reset (after verifying access to email link).

If the device/browser requesting the password reset is recognized, then two-factor authentication could be skipped after clicking an email password reset link.

  What if the user loses the multi-factor device, or the soft token is corrupted, how should that be re-provisioned?

If the device/browser is recognized or if the user already has an authenticated session on the device then the user should be able to de-provision the lost second-factor device and provision a replacement second factor device.

If the device/browser is not recognized and/or the user does not have an authenticated session on that device then a backup two-factor authentication method must be validated before re-provisioning the second factor device.

  What if the user forgets the password, and loses the token... what should the re-provisioning workflow look like then?

Emailing a reset link is sufficient to recover the password from a device/browser that is recognized as trusted*. After the user resets the password the user can go through the re-provisioning of second factor as described above.

If the user's device/browser is not trusted then the user must verify a backup method if the second-factor device is no longer available. This could be a SMS sent to a backup phone number, or a backup string that was provided when the two-factor authentication device was enrolled. Omitting this verification of a backup code negates that two-factor authentication was ever enabled. It must be performed.

See Google's help docs on 2-step verification for more information about how Google handles these scenarios. They've definitely thought this through and have a lot of good information available online.

* Where 'trusted' means that the user previously authenticated using two-factor authentication and indicated that the device/browser should be trusted for subsequent authentications (and to not require two-factor authentication again from this device).


Blocking Chinese IP addresses I recently checked one of my servers' auth.log file and noticed some very suspicious activity. I recently shut down my server's ssh daemon, so the logs end on Jan 22, but what I noticed after reviewing the log file was that all of the IP addresses are Chinese.

Here are the last 10 lines of failed login attempts:

$ cat auth.log | grep Failed | tail -n10
Jan 22 13:42:14 servername sshd[10306]: Failed password for root from 183.3.202.104 port 10894 ssh2
Jan 22 13:42:18 servername sshd[10306]: message repeated 2 times: [ Failed password for root from 183.3.202.104 port 10894 ssh2]
Jan 22 13:42:28 servername sshd[10365]: Failed password for root from 183.3.202.104 port 34140 ssh2
Jan 22 13:42:32 servername sshd[10365]: message repeated 2 times: [ Failed password for root from 183.3.202.104 port 34140 ssh2]
Jan 22 13:42:44 servername sshd[10423]: Failed password for root from 183.3.202.104 port 56290 ssh2
Jan 22 13:42:48 servername sshd[10423]: message repeated 2 times: [ Failed password for root from 183.3.202.104 port 56290 ssh2]
Jan 22 13:43:03 servername sshd[10511]: Failed password for root from 183.3.202.104 port 64153 ssh2
Jan 22 13:43:08 servername sshd[10511]: message repeated 2 times: [ Failed password for root from 183.3.202.104 port 64153 ssh2]
Jan 22 13:43:18 servername sshd[10569]: Failed password for root from 183.3.202.104 port 33472 ssh2
Jan 22 13:43:23 servername sshd[10569]: message repeated 2 times: [ Failed password for root from 183.3.202.104 port 33472 ssh2]

When searching for non 183.3.202.104 IP addresses, the lines become:

$ cat auth.log | grep Failed | grep -v 183.3.202.104 | tail -n10
Jan 22 02:36:41 servername sshd[31074]: message repeated 5 times: [ Failed password for root from 221.203.142.71 port 33746 ssh2]
Jan 22 02:36:54 servername sshd[31388]: Failed password for root from 221.203.142.71 port 57792 ssh2
Jan 22 02:37:13 servername sshd[31388]: message repeated 5 times: [ Failed password for root from 221.203.142.71 port 57792 ssh2]
Jan 22 02:37:25 servername sshd[31698]: Failed password for root from 221.203.142.71 port 55440 ssh2
Jan 22 02:37:41 servername sshd[31698]: message repeated 5 times: [ Failed password for root from 221.203.142.71 port 55440 ssh2]
Jan 22 02:37:58 servername sshd[31918]: Failed password for root from 221.203.142.71 port 50225 ssh2
Jan 22 02:38:13 servername sshd[31918]: message repeated 5 times: [ Failed password for root from 221.203.142.71 port 50225 ssh2]
Jan 22 04:55:23 servername sshd[22179]: Failed password for invalid user support from 113.160.158.43 port 61614 ssh2
Jan 22 09:36:40 servername sshd[4160]: Failed password for invalid user a from 115.182.249.11 port 53046 ssh2
Jan 22 09:36:52 servername sshd[4204]: Failed password for invalid user oracle from 115.182.249.11 port 56673 ssh2

So first of all, I'd like to confirm that this is indeed an attack; I'm very unfamiliar with managing system security. Second, I'd like to know if there's any way to block all Chinese IP addresses; my server has so far been used solely in America and has nothing to do with China.

You can try Wizcraft's block list, and format it accordingly. At the time of my post, this blocklist was last updated on Thursday, 24-Dec-2015 11:01:52 MST. Keep in mind, Taiwan is not part of Mainland China, but that Hong Kong now belongs to, and is controlled by Beijing.

If you only use your server in America exclusively, you could use all of those rules to block attackers. If not, edit out the ones you don't want, and keep the ones you do.

Also keep in mind, this will not stop attackers from connecting to a VPN in a country of their choice, and once again attempting to login as root. This is merely a band-aid.

EDIT - BadSkillz and Jenny D have recommended fail2ban. This will probably be a better solution overall, but it probably wouldn't hurt to use both methods.


How does the predator network prevent outside control by an attacker? I read several articles saying some of the command and control fleet for the US robotic attack planes may have been infected with a virus.

Does this command and control system communicate with the planes using the internet on a giant VPN of sorts?  What systems are in place to prevent these robot planes from becoming controlled by someone else?

Please limit discussion to unclassified info to keep everyone out of trouble.

See: wiki on SIPRNet and NIPRNet.

Essentially the two are airgapped, and should not be interconnected at any point.  In fact, measures are taken to prevent that very thing.  Nevertheless humans are on both networks, which means the results are mixed.


Could one cause IP fragments' Identification Field collision and thus hinder server's work? Is it possible that collision occurs when malicious user spoofs his IP to imitate legitimate user and sends IP with same src/dest/"Identification Field" values in IP's header thus causing reassembly of corrupted IP datagram?
How to prevent it?

If an attacker is able to read IP packets because nothing prevents him to do so in the network (e.g. IPsec) then yes, he can send crafted packets with the same ID field than legitimate ones. IP does not protect this value from being read.

The attacker needs to predict what the Identification field will be in the packet if he has not seen a fragment yet or sniff it and sends a packet/fragment fast enough to be taken into account.

There is a race between the packet/fragment sent in the same time by the legitimate user and the one sent by an attacker unless the attacker is in a man-in-the-middle  position and can stop and replace legitimate packets.

How fragments are reassembled are dependant of operating systems, one may prefer the first fragment that has been received with a certain offset, another might prefer the last one (first option is more common in reverse overlap cases, second is more common in forward overlap cases). A very good paper has been published years ago about it.

It is hard to detect and prevent, the same mecanisms than the ones for preventing IP spoofing could be used:

IPsec
Layer 2 protections (802.1x...)
Check for IP origin (filter packets from outside your network claiming to be inside)

But nothing in IP itself can prevent it.


How to prevent other hosts on the same LAN from seeing my IP and host name? I want to hide my computer IP dan hostname when I am online on the same LAN on which other computers running netcut and other network tools. I have installed netcut defender but it seems not to hide my identity.

Is it possible to hide my identity?

Actually, I disagree with tylerl's answer. It is indeed difficult to hide our IP from other hosts on a LAN, it's very possible.

Because you're mentioning netcut (a tool that works by using ARP poisoning), I think you have the following setup:

You trying to use the Internet.
Router giving you access to the Internet.
Other hosts on the same LAN.
Some malicious hosts trying to cut off your Internet connection.

The idea is quite simple: All you need is to block all inbound connections to your computer and all broadcast communications from your computer. This requires a slight knowledge of the network (at least the router's MAC and IP address) as you'll have drop all ARP requests (in and out). The only thing left to do is configure the router's IP address as your gateway and only communicate with it.

That method will indeed keep you hidden on the network as only the router will know of your existence. It will also protect you from netcut as your IP will not show on other hosts' ARP tables. However, this will not protect you from other ARP poisoning attacks that can spy on your connection and even completely cut you off.


IP address of an iPhone Recently I logged on to my bank account via the Chase app on my iPhone. I received a message that another device was currently logged on to my account and "would I like to end the session"? Of course, I ended it.  I went directly to Chase Bank and spoke with their security department. There was another user logged on from another iPhone. All they could give me was their IP address. Is there any way to track who this was? And do iPhones use random IP addresses depending on the location and whether WiFi is available or not?

There is a possibility that the other iPhone was... yours.

Your IP address is awarded to you by whatever technology provides your Internet access. When you connect over 3G, the IP address comes from your phone company. When you connect over WiFi, you get an IP address from the WiFi access points. The IP addresses can be "dynamic", i.e. it may change over time. Also, each WiFi access point can only give you an IP address that it owns, and most such access points use NAT.

This means that when you connect to WiFi access point A, you get a "private IP" and all your traffic is seen, from the outside (and in particular from the bank server), as coming from A's own unique IP address. If you then use this nifty feature of mobile phones, namely their mobility (you can walk in the street with a phone, there is no wire to deal with), then you may walk away from the range of WiFi access point A, and enter a zone covered by WiFi access point B. Your iPhone, being a smart phone, will automatically connect to B. But then, your requests will come out with B's IP address, not A. Nothing will warn the bank server that your phone has disconnected from WiFi access point A; all that the bank sees is a request bearing B's IP address, whereas a few minutes before they got a request bearing A's IP address. From their point of view, this means that there are two "connected" clients, and they warn about that.

(The technical point here is that Web requests are that: requests. You do not have a direct, permanent connection between your phone and the bank; this is not a phone call. This is more akin to mailing: your phone sends a request, the server sends back a response, but there is no way for the bank to know if you relocated elsewhere since the last request you sent.)


Securing communication over LAN in VPS provider I'm curious about best practice when connecting from app to DB in a cloud provider. A quick rundown of our setup.

We have 4 servers all on the same provider, in the same region running as VPS. Ngnix is the reverse proxy, load balancing to 2 Node.JS servers. The Node.js servers connect to a MongoDB server.

So my question is around security when it comes to the Node.js > Mongo connection. We have the Mongo and Node servers restricted to only connect to each other over LAN via IP tables. The DB and Node instances are not accessible outside the LAN. We also have enabled SCRAM-SHA-1 authentication on the MongoDB.

Do we need to enable TLS/SSL? What are the security risks of a bad actor within the cloud provider trying to sniff our otherwise un-encrypted HTTP communication between node.js and mongo server.

We're considering adding a self-signed cert between the node and mongo machines. This will of course add some overhead to the communication.

Interested in hearing thoughts on best practice. Are you encrypting communications within the LAN on your cloud provider or is this overkill?

Correct me if I'm wrong but someone would need to basically snoop traffic at the internal router/switch level to eavesdrop.

Using an encryption layer between your infrastructure nodes is always a good practice and it's not overkill.

Absolutely always exists a risk of data leakage due to human or other factors. For example, imagine if one of your hosting company routers gets compromised or even worse - there is an ungrateful employee who decides to obtain sensitive information of his company clients. Both situations will permit attackers to view all the netflow traffic and steal data that is unencrypted including yours, allowing to access your further infrastructure.

Organising a VLAN using an encrypted tunnel is a traditional practice within information security area. There are lots of software that permit to do so, such as OpenVPN. It is not taking much time to setup a TLS tunnel and concerning about your sensitive data definitely worth that time.


Does PKI signature verification require secure distribution of public keys? I'm looking at a software project where the GPG public keys of the maintainers are found on a website using HTTP. According to the GNU Privacy Handbook, "The signature is verified using the corresponding public key." So what I'm wondering is, can an attacker encrypt a malicious payload, using a MITM attack on the project website and serving their own public keys?

Don't the public keys used for verification have to be transmitted securely as well?

No. The keys does not need to be transmitted securely, but of course you must transmit them in a such way so they can't be replaced or tampered with, if you want to protect against someone distributing malicious data.

So lets say you are hosting a software repository. Even if you sign a software with your key, if a hacker gains access to the repository, he could upload malicious software AND also replace the "correct" signing keys with her own public keys, so if a end user validates the software, it will come out as valid. That is what the OP is asking.

In the same way, a attacker could replace keys during transmission (MITM attack), so if a user does http://www.example.org/signing_key.asc the MITM can replace the response with his own public key.

So simple signing of software and publishing the key on the software vendor's site, is more aimed to protect against mirrors getting hacked and starting to distribute malicious data.
Thats why some vendors just publish the SHA/MD5 hash of the software, thus the vendor does not need to completely rely on the security of the third-party mirror's.

Thats why its a good idea to transmit the keys using SSL, or have the key signed by a reputable origin (then it becomes a certificate, could be either a x509 one or a PGP one) if you also want to protect against malicious public key replacement.

Another way to protect against this, is that the end user does download and save the key during first interaction. Thus, if the repository later become compromised, the end user will have a saved "correct key", thus it does not matter if the key later become replaced, either during a MITM or hack attack.


Wireless Activity Monitoring for PCI DSS Compliance In an effort to be PCI DSS compliant, I took a trustkeeper.net questionnaire. I failed the question that asks:

  Is the presence of wireless access points tested for by using a wireless analyzer at least quarterly or by deploying a wireless IDS/IPS to identify all wireless devices in use? (SAQ #11.1)

My only wireless access point is outside my firewall, so even if you cracked my wireless you couldn't get inside my domain running on Windows 2000 (unless you crack that too).  My firewall is a Sonicwall Pro 2040 and doesn't have IPS - I couldn't tell if it had IDS. The router is a 8 port D-link.

I looked around for a wireless analyzer, but what I found was $500, which is a little pricey for my size business.  Even if I got it, I'm not sure I would understand what it tells me.  Surely there are smaller/less sophisticated businesses that take credit cards and have solved this?

What are the risks if someone were to crack my wireless?  (Could they read all internet traffic? Just wireless traffic? Just use my internet connection?)  And what is the best/cheapest way to test my connection point quarterly? Should I buy the $500 analyzer?

Update My credit card processor says I can fulfill this requirement by walking around the building and visually searching for unauthorized wireless devices.

To answer your questions:

If someone could breach your wireless security, they may be able to sniff everything going across your wireless network. You may think this is only a small risk, however, if this traffic includes any usernames or passwords which are not further encrypted, then those might be at risk - which would weaken security further.

If they could gain access to an account on the wireless access point itself, there is potentially a wider risk of compromise of the connection into your network.

I wouldn't necessarily buy an analyser if you have an iphone, laptop or other mobile device as you can get free applications to do exactly this :-)

In terms of the question itself - it is arguable how much security a quarterly scan will give you; it really will only spot permanent wireless devices or ones that happen to be on at the time you are scanning. however, to get your PCI-DSS checkbox you had best do it anyway. As @AviD says:

  PCI compliance reduces the risk of the
  penalties of non-compliance


Are there technical framework for IT sec audit just like there are management frameworks? TL;DR

Are there technical frameworks (processes with checklists ruled by international standards like COBIT, ISO 27000) for IT security analysis/auditing ?

Hello,

Let's say you're a software developer. And you need to create a web app for managing information in a database. The process you'll follow to deliver the sofware here will go like this

database modeling (with tools such as ER diagram)
software architecture modeling (with UML )
Database implementation with a DBMS (ex : MySQL) and SQL
Software programming with design pattern like MVC and programming language like Java

  An IT security framework is a series of documented processes used to
  define policies and procedures around the implementation and ongoing
  management of information security controls in an enterprise
  environment.

Source : https://searchsecurity.techtarget.com/tip/IT-security-frameworks-and-standards-Choosing-the-right-one

Such frameworks are COBIT, ISO 27001, NIST SP 800 53, CIS controls, HITRUST CSF, etc.... Those are more like guide like for managers to help them make sure their system is compliant with a standard

My question is : for an IT security analyst/auditor, are there standards that combine the two situations above i.e. a process of conducting technical analysis/audits of a system maintaining a standard ?

I'm asking that because when reading materials like CEH or Cyber Kill Chain, they do not look "professional". It's just a bunch of black hat techniques (not really methodologies) that are combined and offered to so called white hats.

But on a day-to-day basis, how would a technical team of analysts/auditors would organised itself to be professional (possibly by following a framework) without spending their time doing reconnaissance, scanning, exploitation etc... non sense acting like black hackers instead of being productive security professional

Yes, ISO/IEC 27007 provides guidance on managing an information security management system (ISMS) audit program, on conducting audits, and on the competence of ISMS auditors, in addition to the guidance contained in ISO 19011:2011.

ISO/IEC 27007 is applicable to those needing to understand or conduct internal or external audits of an ISMS or to manage an ISMS audit program.

See the index here and the complete content of 19011:2011 here.


Multi-key encryption algorithm I am looking for a way to do multi-key encryption with the set number of decryption keys. The goal is to take a file, encrypt it and generate several decryption keys, in order to decrypt several (not just one, but all either) keys must be used.

Use case:

Receive image.jpeg
Generate an encrypted image.jpeg.crypt, image.jpeg.key1, image.jpeg.key2, image.jpeg.key3
Distribute keys to three different persons

After this 2 keys must be present to decrypt, but any 2 of the mentioned 3.

In perfect scenario i should be able to say: "Generate X keys, out of which Y keys will be required to decrypt".

P.S. This is not a duplicate of Encryption strategies for multi users access in production systems where any one key decrypts, nor is it a duplicate of Doubling up or cycling encryption algorithms where every key must be provided.

You are looking for secret sharing algorithms. Once such scheme was proposed by Shamir, called Shamir's secret sharing algorithm.

Quoting from Wikipedia:

  ... a secret is divided into parts, giving each participant its own
  unique part, where some of the parts or all of them are needed in
  order to reconstruct the secret.