For example, I know a password has to have at least 3 symbols, but I don't know where those symbols are. What is the simplest way to specify this when cracking the password with hashcat? The only method I found was through a .hcmask file and then just manually writing down every possible mask (eg ?a?a?a?s?s?s, ?a?a?s?a?s?s) and so on but that seems like an insanely complicated way for something so straightforward. Is there an easier way to do it?
The multiple-masks method is currently the only way to narrowly control combined character sets in hashcat.
Note also that since ?a includes ?s, intermixing them as you've done in your example would be redundant. You can include character-set specifications in a masks file, so you'd probably want something like:
Making such mask files can be tedious. You can automate it with the
policygen script from the PACK toolkit.